![]() |
Zeichnung
Liste der Anhänge anzeigen (Anzahl: 1)
HI wieso zeichnet der wenn man als seitenlängen bei a=4, b=5 und c=3
b falsch? |
hmm,
was ist denn b ? Leider fehlen mir da die Bezeichnungen ab den Geraden, dann wäre alles klarer ;)
|
Was mich stört ist das auftauchende Fenster das mir sagt: "Das Dreieck ist konstruierbar." Das stört unheimlich. Würd ich wegmachen.
MfG Florian :hi: P.S.: Ach ja, Bezeichnungen wären wirklich sehr sinnvoll. |
hmm ja stimmt das mit den seiten dass da nix dransteht aber ich weiss nich wie ich da was dranschreiben lassen kann
also unten die seite ist c oben links die is seite a un oben rechts b und das mit dem showmessage kram kann ich ja noch wegmachen mfg martin |
also ist links unten auch alpha, rechts unten beta un oben gamma
so aber der zeichnet wenn beta 90° ist für beta keine 90° das wäre zb bei a=4 b=5 un c=3 |
ach übrigens das zeichnen liegt auf der procedure vom bottom 2 :coder:
|
Hallo,
Habe mir mal die Freiheit genommen deinen Quelltext abzuändern. Mit deinen Berechungen bin ich irgendwie nicht klargekommen. Ist nur ein Test und ich weiß nich ob es für alle Variationen funzt. Die meisten die ich probiert habe, gingen. Mir ist nur aufgefallen, daß manchmal nicht das richtige Größenverhältnis gezeichnet wird(z.B. bei a=5,b=4,c=3 da geht es über den Rand hinaus). Vieleicht muß ja nur was an den Umrechnungsfaktoren geändert werden. Probiers halt mal aus, wenn es dir was nützt.
Delphi-Quellcode:
[edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit]
procedure TForm1.Button2Click(Sender: TObject);
var x_start,y_start,err1,err2,err3: integer; x1, h1, laenge,a,b,c,a2,b2,c2 :double; p,q,hp,hq:Extended; function dreieck(SeiteA,SeiteB,SeiteC : double): double; begin try p:=(c*c + b*b - a*a)/(2*c); //P = Lotabschnitt von c auf der b-Seite q:=(c*c + a*a - b*b)/(2*c); //q = Lotabschnitt von c auf der a-Seite hp := b*b - p*p; //wobei nur hp oder hq gebraucht wird hq := a*a - q*q; //ist ein und der selbe Wert (Höhe) hp := sqrt(hp); //wurde nur zur konntrolle 2 mal berechnet hq := sqrt(hq); laenge := 0.9 * paintbox1.width; h1 := hp*laenge/c; x1 := q*laenge/c; c := laenge; {Zeichne Dreieck} x_start := round(0.05*paintbox1.width); y_start := round((paintbox1.height + h1) / 2); with paintbox1.canvas do begin rectangle(0,0,paintbox1.height,paintbox1.width); MoveTo(x_start, y_start); LineTo(x_start + round(c), y_start); LineTo(x_start + round(x1), y_start - round(h1)); LineTo(x_start, y_start); end; {of with} except showmessage('Sorry, Probleme beim Zeichnen!'); end; end; begin {Lege Maximum auf c} val(edit1.text,a2,err1); val(edit2.text,b2,err2); val(edit3.text,c2,err3); if (c>b) and (c>a) then begin a:=a2; b:=b2; c:=c2; dreieck(a,b,c); end; if (a>b) and (a>c) then begin c:=a2; b:=b2; a:=c2; dreieck(a,b,c); end; if (b>c) and (b>a) then begin b:=a2; c:=b2; a:=c2; dreieck(a,b,c); end; if (b=c) and (b=a) and (c=a) then a:=a2; b:=b2; c:=c2; dreieck(a,b,c); end; |
Huch,
Hab da was übersehen. In bei den IF's mußt du noch a,b,c durch a2,b2,c2 ersetzen. a,b,c haben zu dieser zeit ja noch keinen Wert zugewiesen bekommen. [EDIT=Christian Seehase] Doppelposting gelöscht [/EDIT] |
hi, danke aber das prog zeichnet nicht die richtigen winkel :cry:
mfg martin |
moin,
binde noch zusätzlich die unit "math" ein, dann steht dir die funktion arccos zur verfügung und du brauchst sie nciht selbst zu schreiben ;) |
hi, geht nicht, weil das prog sollten wir für die Schule schreiben und dort gibt es nur delphi3 und delphi3 hat diese unit nicht
mfg martin |
Hallo,
hab da wohl zu kompliziert gedacht in der Funktion Dreieck: in der Zeile
Code:
q durch p ersetzen
x1 := q*laenge/c;
in der Procedure button2click: - Variablen a2,b2,c2 brauchst du nicht - Bedingungen welche Seite die größte ist brauchst du auch nicht so sieht es dann aus:
Code:
ich würde aber noch eine Bedingung einbauen, wenn z.B. eine Seite zu kurz ist oder solche ähnlichen Sachen
procedure TForm1.Button2Click(Sender: TObject);
var err1,err2,err3 :integer; begin val(edit1.text,a,err1); val(edit2.text,b,err2); val(edit3.text,c,err3); dreieck(a,b,c); end; ich habe dann noch den faktor in der Zeile
Code:
auf 0.5 gesetzt da es sonst über die Fläche hinaus ging.
laenge := 0.9 * form1.paintbox1.width;
Vieleicht gibt es da ja noch ne bessere Berechnung/Lösung dafür. Bei mir haben die Winkel funtioniert, jedenfalls die wo ich das mit dem Auge abschätzen konnte. |
hallo Biohazard danke,
aber ich blicke grade nicht durch, wie würde der quelltext jez als ganzes aussehen? *ggg* Gruss woodie |
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
das ist aber nicht Sinn und Zweck eines Lernprozesses. :) Ich will mal nicht so sein. An der andere Prozedure mit den reinen Berechnungen hab ich aber nichts verändert. Wie gesagt, ein paar Kleinigkeiten mit dem Maßstab müssten noch bereinigt werden. |
hi, danke
aber das mit dem lernprozess war gut :lol: gruss martin |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz