![]() |
Re: Dreiecksberechnungen und zeichnen
Liste der Anhänge anzeigen (Anzahl: 1)
Sorry, aber irgendwie weiß ich auch nicht was du meinst.
Vielleicht hilft mir das Bild im Anhang, euch die sache verständlich zu machen :( |
Re: Dreiecksberechnungen und zeichnen
Mal zu der Frage, wie herausfinden ob ein Dreieck zeichenbar ist oder nicht.
Gab es da nicht solche Sätze mit den Winkel-Seiten-Beziehungen?! Zitat:
|
Re: Dreiecksberechnungen und zeichnen
Zitat:
D.h. also a + b > c, c + b > a und a + c > b |
Re: Dreiecksberechnungen und zeichnen
Ok, nochmal schrittweise was Du machen kannst.
- Prüfen ob die Seiten gültig sind (müssten dann eben die Dreiecksungleichung erfüllen). - Unter Verwendung des Kosinussatzes die Winkel zwischen den Geraden bestimmen - Unter Verwendung der Winkel die Höhe des Dreiecks bestimmen - Unter Verwendung des Euklid'schen Kathetensatz den Punkt berechnen auf der Geraden c berechnen, der senkrecht zu Deinem C ist (der Punkt C hat dann die gleiche X-Koordinate und die Y-Koordinate ist um die Höhe des Dreiecks versetzt) Den Punkt A kannst Du frei wählen, beim Punkt B wird die Position durch die Länge der Seite c bestimmt, den Punkt C kannst Du ausrechnen, dann musst Du nur noch eine gerade von A nach B, von A nach C und von B nach C zeichnen, fertig. |
Re: Dreiecksberechnungen und zeichnen
Zitat:
|
Re: Dreiecksberechnungen und zeichnen
Ok, das Problem mit dem zeichnen habe ich geschafft.
Beim zweiten Problem (Prüfen ob Dreieck konstruierbar oder nicht), bin ich noch dabei. Bis jetzt sieht es so aus:
Code:
Soweit klappt es schon, aber nun kommt jedesmal eine showmessage wenn ich zwischen den Editfeldern hin und her klicke. Ich würde es gerne so programmieren, das nur eine showmessage kommt, bis das dreieck konstruierbar ist.
procedure TForm1.Edit3Exit(Sender: TObject);
var err1, err2, err3 :integer; begin val(Edit1.Text,SeiteA,err1); //ließt Seite a ein val(Edit2.Text,SeiteB,err2); //ließt Seite b ein val(Edit3.Text,SeiteC,err3); //ließt Seite c ein if (Edit1.Text<>'') and (Edit2.Text<>'') and (Edit3.Text<>'') then begin if (SeiteA+SeiteB>SeiteC) and (SeiteB+SeiteC>SeiteA) and (SeiteC+SeiteA>SeiteB) then begin // lasse ich erstmal frei, weil es nicht so funktioniert wie ich es wollte. // ich hatte eigentlich vor, diese variante zu nutzen: // if not (SeiteA+SeiteB>SeiteC) and not (SeiteB+SeiteC>SeiteA) and not (SeiteC+SeiteA>SeiteB) end else begin showmessage('Das Dreieck ist nicht konstruierbar.'); // Die Berechnungs-Button werden aus Sicherheitsgründen disabled button1.Enabled:=false; button3.Enabled:=false; button5.Enabled:=false; button6.Enabled:=false; end; end; end; |
Re: Dreiecksberechnungen und zeichnen
Zitat:
hc^2=a^2-c1^2 hc^2=b^2-c2^2 c=c1+c2 a^2-c1^2=b^2-c2^2 a^2-c1^2=b^2-(c-c1^2) nach Umstellung dieser Formel erhält mann: c1=(a^2-b^2+c^2)/(2*c) damit lässt sich jetzt die Höhe auf Seite c berechnen
Delphi-Quellcode:
procedure TForm1.DreieckZeichnen(SeiteA, SeiteB, SeiteC: Integer);
var A : TPoint; B : TPoint; C : TPoint; c1 : Double; hc : Double; begin c1:= (sqr(SeiteB)-sqr(SeiteA)+sqr(SeiteC))/(2*SeiteC); hc:= Sqrt(sqr(SeiteB)-sqr(c1)); A.X:= 20; A.Y:= PaintBox1.Height-20; B.X:= A.X+SeiteC; B.Y:= A.Y; C.X:= A.X+Trunc(c1); C.Y:= A.Y-Trunc(hc); with PaintBox1 do begin Canvas.FillRect(Rect(0, 0, Width, Height)); Canvas.MoveTo(A.X, A.Y); Canvas.LineTo(B.X, B.Y); Canvas.LineTo(C.X, C.Y); Canvas.LineTo(A.X, A.Y); end; end; |
Re: Dreiecksberechnungen und zeichnen
Hallo, ich habe eine Frage: wie kann ich eine Art wie Zoomfunktion einbauen, dass ein Dreieck der Größe 4,5,6 genau so aussieht die eines der Größe 400, 500, 600?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:17 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