![]() |
Auf einem Canvas ein Dreieck zeichnen und drehen können
Hallo Zusammen,
ich möchte ein spitzes Dreieck zeichnen wobei die Größe des Dreiecks immer gleich ist. Die Spitze des Dreiecks (A) ist zugleich die Drehachse. Wie kann ich nun in Abhängigkeit von "Winkel" die Koordinaten für "B" und "C" berechnen? Eigentlich geht es nur ums berechnen von punkten über Winkelfunktionen. ... es ist zu lange her ich weis es einfach nicht mehr wie es geht. Deshalb bitte ich Hilfe. Meine Zeichenroutine sieht so aus: procedure TForm1.ZeichneDreieck(PositionA : TPoint; Winkel:Double); var A,B,C:TPoint; begin with form1 do begin // A:=PositionA; A:=Point(100,100); B:=Point(100,150); C:=Point(250,125); canvas.Polygon([A,B,C]); end; end;{ZeichneDreieck} |
Re: Auf einem Canvas ein Dreieck zeichnen und drehen können
rechne dir am Besten erst mal den Winkel zwischen der Strecke AB (B: rechte Ecke) und der Waagrechten aus. Ich sag mal, der hat -45°.
Wenn du das Ganze jetzt um 90° drehen willst, rechnest du beide Werte erst mal zusammen und legst dann los.
Delphi-Quellcode:
Demenstprechend
Alpha:= 45°;
B.x:=A.x-(Seitenlänge)*sin(alpha/180*PI); // Winkel in Rad '-' da der Origo bei Delphi links oben ist.
Delphi-Quellcode:
Müsste so in etwa klappen.
B.y:=A.y-(Seitenlänge)*cos(alpha/180*PI);
:dp: Herzlich willkommen in der DP :dp: // Wenn du Code postest, kannst du die [delphi ]-Tags benutzen. |
Re: Auf einem Canvas ein Dreieck zeichnen und drehen können
Mir würde da noch Vektor-Rechnung einfallen, wäre jetzt aber mit Kanonen auf Spatzen.
Ansonsten: Full Ack @ Toxman. |
Re: Auf einem Canvas ein Dreieck zeichnen und drehen können
Herlichen Dank für die Antwort.
Sorry aber ich habs immer noch nicht verstanden :-(( Erkennt ihr den Fehler?
Code:
Gruß Gitta.
procedure TForm1.TrackBar1Change(Sender: TObject);
var A,B,C :TPoint; x,y:integer; Winkel,alpha:Double; Hoeche,Breite,Seitenlaenge:double; tanWinkel, Betta:Double; begin Winkel := TrackBar1.position; x:=100; y:=100; Hoeche := 35; Breite := 15; Seitenlaenge := sqrt(sqr(Hoeche)+sqr(Breite/2)); with form1 do begin Form1.refresh; A := Point(x,y); B.x:=trunc(A.x-(Seitenlaenge)*sin(Winkel/180*PI)); B.y:=trunc(A.y-(Seitenlaenge)*cos(Winkel/180*PI)); C.x:=trunc(A.x+(Seitenlaenge)*sin(Winkel/180*PI)); C.y:=trunc(A.y+(Seitenlaenge)*cos(Winkel/180*PI)); canvas.Polygon([C,A,B]); end;{with} end; |
Re: Auf einem Canvas ein Dreieck zeichnen und drehen können
hier liegt der Fehler:
Delphi-Quellcode:
Du benutzt für C und B den gleichen Winkel. Bei deiner Berechnung Spiegelst du B an A und erhällst so C. Um C zu errechnen musst du vor der C.x... Berechnung den Winkel zwischen AC und AB von Winkel abziehen.
B.x:=trunc(A.x-(Seitenlaenge)*sin(Winkel/180*PI));
B.y:=trunc(A.y-(Seitenlaenge)*cos(Winkel/180*PI)); C.x:=trunc(A.x+(Seitenlaenge)*sin(Winkel/180*PI)); C.y:=trunc(A.y+(Seitenlaenge)*cos(Winkel/180*PI)); Versuchs mal so:
Delphi-Quellcode:
// [Delphi ]-Tags nicht [Code ]-Tags :zwinker:
B.x:=trunc(A.x-(Seitenlaenge)*sin(Winkel/180*PI));
B.y:=trunc(A.y-(Seitenlaenge)*cos(Winkel/180*PI)); winkel:=winkel-30; // Musst du dir selbst errechnen, nur mal als Bsp. C.x:=trunc(A.x+(Seitenlaenge)*sin(Winkel/180*PI)); C.y:=trunc(A.y+(Seitenlaenge)*cos(Winkel/180*PI)); |
Re: Auf einem Canvas ein Dreieck zeichnen und drehen können
Hallo Toxman,
Volltreffer, genau das war es. Ich bin Dir sehr Dankbar. Dir noch einen schönen Sonntag. Gruß Gitta. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 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 by Thomas Breitkreuz