AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Auf einem Canvas ein Dreieck zeichnen und drehen können

Auf einem Canvas ein Dreieck zeichnen und drehen können

Ein Thema von gitta · begonnen am 10. Okt 2004 · letzter Beitrag vom 10. Okt 2004
Antwort Antwort
gitta

Registriert seit: 10. Okt 2004
10 Beiträge
 
#1

Auf einem Canvas ein Dreieck zeichnen und drehen können

  Alt 10. Okt 2004, 13:43
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; Winkelouble);
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}
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Auf einem Canvas ein Dreieck zeichnen und drehen können

  Alt 10. Okt 2004, 13:59
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
B.y:=A.y-(Seitenlänge)*cos(alpha/180*PI); Müsste so in etwa klappen.

Herzlich willkommen in der DP



// Wenn du Code postest, kannst du die [delphi ]-Tags benutzen.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#3

Re: Auf einem Canvas ein Dreieck zeichnen und drehen können

  Alt 10. Okt 2004, 14:21
Mir würde da noch Vektor-Rechnung einfallen, wäre jetzt aber mit Kanonen auf Spatzen.
Ansonsten: Full Ack @ Toxman.
  Mit Zitat antworten Zitat
gitta

Registriert seit: 10. Okt 2004
10 Beiträge
 
#4

Re: Auf einem Canvas ein Dreieck zeichnen und drehen können

  Alt 10. Okt 2004, 17:15
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.
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Auf einem Canvas ein Dreieck zeichnen und drehen können

  Alt 10. Okt 2004, 17:22
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
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
gitta

Registriert seit: 10. Okt 2004
10 Beiträge
 
#6

Re: Auf einem Canvas ein Dreieck zeichnen und drehen können

  Alt 10. Okt 2004, 17:43
Hallo Toxman,

Volltreffer, genau das war es. Ich bin Dir sehr Dankbar.
Dir noch einen schönen Sonntag.

Gruß Gitta.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf