Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Auf einem Canvas ein Dreieck zeichnen und drehen können (https://www.delphipraxis.net/31492-auf-einem-canvas-ein-dreieck-zeichnen-und-drehen-koennen.html)

gitta 10. Okt 2004 13:43


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}

Nikolas 10. Okt 2004 13:59

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:
Alpha:= 45°;

B.x:=A.x-(Seitenlänge)*sin(alpha/180*PI); // Winkel in Rad '-' da der Origo bei Delphi links oben ist.
Demenstprechend
Delphi-Quellcode:
B.y:=A.y-(Seitenlänge)*cos(alpha/180*PI);
Müsste so in etwa klappen.

:dp: Herzlich willkommen in der DP :dp:



// Wenn du Code postest, kannst du die [delphi ]-Tags benutzen.

Nonsense 10. Okt 2004 14:21

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.

gitta 10. Okt 2004 17:15

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:
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;
Gruß Gitta.

Nikolas 10. Okt 2004 17:22

Re: Auf einem Canvas ein Dreieck zeichnen und drehen können
 
hier liegt der Fehler:
Delphi-Quellcode:
  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));
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.

Versuchs mal so:
Delphi-Quellcode:
 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));
// [Delphi ]-Tags nicht [Code ]-Tags :zwinker:

gitta 10. Okt 2004 17:43

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