Einzelnen Beitrag anzeigen

w4rheart

Registriert seit: 16. Mär 2010
53 Beiträge
 
#23

Re: Dreieck um Punkt auf der Hypotenuse drehen

  Alt 17. Mär 2010, 18:09
Hello again!
Also dank eurer Hilfe hab ich jetzt soweit das meiste hingekriegt!
Allerdings zeigen sich jetzt bei dem Programm die von euch oben angesprochen Rundungsfehler.
Das ist meine DrehFunktion:
Delphi-Quellcode:
var
  Ax,Bx,Cx,Ay,By,Cy,winkelx:integer;
  Sn,Cs:extended;
begin
  deldreieck; //altes Dreieck löschen
  winkel:=winkel-alpha;

  Cs:= cos(degtorad(alpha));
  Sn:= sin(degtorad(alpha));

  //Neue Punkte errechnen(nachRotation)
  Ax := round(Cs * (A.x-xpos) - Sn * (A.y-ypos));
  Ay := round(Sn * (A.x-xpos) + Cs * (A.y-ypos));
  A:=Point(xpos+Ax,ypos+Ay);

  Bx := round(Cs * (B.x-xpos) - Sn * (B.y-ypos));
  By := round(Sn * (B.x-xpos) + Cs * (B.y-ypos));
  B:=Point(xpos+Bx,ypos+By);

  Cx := round(Cs * (C.x-xpos) - Sn * (C.y-ypos));
  Cy := round(Sn * (C.x-xpos) + Cs * (C.y-ypos));
  C:=Point(xpos+Cx,ypos+Cy);

  Image1.Canvas.Polygon([A,B,C]); // Neues Dreieck Zeichnen
(A,B,C,xpos,ypos sind globale Integer Variablen)

Bei Kleineren Winkeln funktioniert das Ganze nicht! -> Rundungsfehler?
Die Version von Panthrax funktioniert, allerdings habe ich da noch nicht ganz durchgeblickt,
und weiss nicht genau wie ich das auf meien Prozedur oben anwenden soll.

Hab im Anhang nochmal das Programm beifügt.
(Beim löschen des alten Dreiecks gibt es immmernoch Probleme... ist aber erstmal nicht ganz so wichtig)

MfG
w4rheart

//EDIT: Hat sich erledigt. hab jetzt alles mit reals gerechnet und nicht mehr mit integern, jetzt tuts eig. alles (Programm im Anhang).
Bis auf 1. Sache (Das wird aber wahrscheinlch durch das Canva sbedingt nicht lösbar sein, glaub ich):
Wenn ein neues Dreieck gezeichnet wird, muss das alte vorher gelöscht werden. Wenn das Dreieck aber jetzt auf einer linie Mit einem gezeichneten Strich liegt, wird dieser Auch gelöscht, so entsehen Lücken! - Und die will ich weghaben^^
Ist evtl möglich 2 Timage.Canvas übereinander zulegen, und 1 Transparent zu machen? So könnte man auf einem nur die Dreiecke Zeichnen, und auf dem anderen die linien
Mh, Probier ich mal aus...
Angehängte Dateien
Dateityp: zip dreiecksrotation_189.zip (210,7 KB, 11x aufgerufen)
  Mit Zitat antworten Zitat