Es wird gesagt, dass, um eine Linie um einen bestimmten Winkel zu drehen, multiplizieren Sie ihre Endpunkt Koordinaten durch die Matrix ({Cos (a), Sin (a)} {-Sin (a) Cos (a)}), wobei ein Rotationswinkel ist. Die resultierenden zwei Zahlen in der Matrix sind x und y Koordinaten des Endpunktes der gedrehten Linie. Die Rotation verläuft um den Startpunkt der Linie. Vereinfachend, neue Koordinaten werden {x * Cos (a) - y * Sin (a)} für x und {x * Sin (a) + y * Cos (a)} für y.Problem rotierende einfache Linie Bild
Aufgabe ist es, ein Dreieck zu drehen, mit dieser Methode. Aber der folgende Code, der diese Methode verwendet, einigen Mist heraus geben wird statt gedrehte Bild (twisted Form von Original-Dreieck, gedreht durch „random“ Winkel):
x0:=200;
y0:=200;
bx:=StrToInt(Edit1.Text);
by:=StrToInt(Edit2.Text);
cx:=StrToInt(Edit4.Text);
cy:=StrToInt(Edit5.Text);
a:=StrToInt(Edit3.Text);
//Original triangle
Form1.Canvas.Pen.Color:=clBlue;
Form1.Canvas.MoveTo(x0,y0);
Form1.Canvas.LineTo(bx,by);
Form1.Canvas.LineTo(cx,cy);
Form1.Canvas.LineTo(x0,y0);
//New triangle
Form1.Canvas.Pen.Color:=clGreen;
Form1.Canvas.MoveTo(x0,y0);
b1x:=Round(bx*cos(a*pi/180)-by*sin(a*pi/180));
b1y:=Round(bx*sin(a*pi/180)+by*cos(a*pi/180));
c1x:=Round(cx*cos(a*pi/180)-cy*sin(a*pi/180));
c1y:=Round(cx*sin(a*pi/180)+cy*cos(a*pi/180));
Form1.Canvas.LineTo(b1x,b1y);
Form1.Canvas.MoveTo(x0,y0);
Form1.Canvas.LineTo(c1x,c1y);
Form1.Canvas.LineTo(b1x,b1y);
end;
Nun, ich bin aus Ideen. Was mache ich falsch?
Danke für Ihre Zeit.
Vielen Dank. Problem war wirklich die Relativität von x und y =) – Arnthor