![]() |
Rechtwinkeliges Dreieck zeichnen
Wie kann ich ein rechtwinkeliges Dreieck zeichnen? Ich habe den nur den Anfgangs- und Endpunkt der längsten Seite. Die beiden anderen Winkel sollen je immer 45 Grad sein. Wie kann ich nun die XY-Koordinaten des 90-Grad-Winkels berechnen? Dann kann ich einfach mit LineTo() alles zu einem Dreieck verbinden. Danke!
|
Re: Rechtwinkeliges Dreieck zeichnen
Selbst mit diesen Angaben gibt es noch zwei Moeglichkeiten: Die Spitze koennte in zwei Richtungen zeigen.
|
Re: Rechtwinkeliges Dreieck zeichnen
Zitat:
|
Re: Rechtwinkeliges Dreieck zeichnen
der Punkt, in dem der rechte winkel anliegt, ist genau über/unter der mitte der hypothenuse und zwar im abstand der hälfte der hypothenuse; also würde man eine orthogonale zur hypothenuse, durch deren mitte zeichnen, würde der punkt auf der graden liegen!
btw, das is jetzt nur eine übelegung, ob es jetzt ganz richtig ist weiß ich nicht, kommt mir aber relativ plausibel vor^^ |
Re: Rechtwinkeliges Dreieck zeichnen
du brauchst nur die höhe mit pythagoras zu berechnen.
Ansatz: h²+(a/2)²=a² |
Re: Rechtwinkeliges Dreieck zeichnen
Hm,
A = (ax, ay) B = (bx, by) M = A + (B - A) / 2 (Mittelpunkt der Hypothenuse) M = (ax, ay) + ((bx-ax)/2, (by-ay)/2) Wenn ich mch jetzt noch erinnern koennte, wie man einen Vektor um 90 Grad dreht.... Ach ja: Koordinaten vertauschen und eine davon negativ nehmen: Vektor von A nach B: ((bx-ax),(by-ay)) Vektor senkrecht dazu: 1. (-(by-ay),(bx-ax)) = (ay-by,bx-ax) 2. ((by-ay),-(bx-ax)) = (by-ay,ax-bx) Daraus ergibt sich dann: 1. C = (ax, ay) + ((bx-ax)/2, (by-ay)/2) + ((ay-by)/2,(bx-ax)/2) 2. C = (ax, ay) + ((bx-ax)/2, (by-ay)/2) + ((by-ay)/2,(ax-bx)/2) Mann, mein Mathe ist schon verdammt lange her. OK, als Delphi Prozedur:
Delphi-Quellcode:
Das muesste es tun, aber ich habe es nicht ausprobiert.
procedure GleichschenkligRechtwinkligesDreieck(A, B: TPoint; out C1, C2: TPoint);
var AB2: TPoint; // Vektor AB / 2 H1, H2: TPoint; // Hoehe 1 und 2 begin AB2 := Point(Round((B.x - A.x) / 2), Round((B.y - A.y) / 2)); H1 := Point(Round((A.y - B.y) / 2), Round((B.x - A.x) / 2)); H2 := Point(Round((B.y - A.y) / 2), Round((A.x - B.x) / 2)); C1 := Point(A.x + AB2.x + H1.x, A.y + AB2.y + H1.y); C2 := Point(A.x + AB2.x + H2.x, A.y + AB2.y + H2.y); end; |
Re: Rechtwinkeliges Dreieck zeichnen
Also mit Hilfe von Sinus und dem Winkel ist es doch kein Problem:
Länge der Hypothenuse = a (start bei a1, Ende bei a2); Da der Winkel al=45° => Katheten sind gleich lang Zum zeichnen einer 45° Linie bei Delphi:
Delphi-Quellcode:
Da bei 45° die Höhe die Hypothenuse genau bei a/2 schneidet, kannst du d1 ohne Probleme berechnen (vorausgesetzt, die Hypothenuse ist eine Waagrechte bzw. Senkrechte).
MoveTo(x,y);
LineTo(x+d1,y+d1); Ansonsten musst du x und y der Spitze berechnen. Dazu benötigst du noch den Winkel der Hypothenuse zur Waagrechten. Diese Berechnung sollte mit Hilfe einfacher Winkel-Berechnungen kein Problem sein. Und das ist nun deine Hausaufgabe :D |
Re: Rechtwinkeliges Dreieck zeichnen
Danke, mit eurer Hilfe habe ich es geschafft:
Delphi-Quellcode:
{**
Zeichnet ein rechtwinkliges Dreieck mit Alpha 45°, Beta=45° und waagerechter Hypotenuse. @param Canvas Zeichenfläche. @param TopLeft Startpunkt der Hypotenuse. @param Width Breite der Hypotenuse. @param SpikeTop Spitze ober- oder unterhalb der Hypotenuse zeichnen? @return Position der Spitze. *} function DrawTriangle90(Canvas: TCanvas; TopLeft: TPoint; Width: Integer; SpikeTop: Boolean): TPoint; var H, Direction: Integer; begin if SpikeTop then Direction := -1 else Direction := 1; H := Width div 2; Result := Point(TopLeft.X + H, TopLeft.Y + H * Direction); Canvas.Polygon([TopLeft, Point(TopLeft.X + Width, TopLeft.Y), Result]); end; Beispiel: DrawTriangle90(PaintBox1.Canvas, Point(50, 60), 30, True); |
Re: Rechtwinkeliges Dreieck zeichnen
Zitat:
|
Re: Rechtwinkeliges Dreieck zeichnen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 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