Il est indiqué que pour faire pivoter une ligne d'un certain angle, vous multipliez ses coordonnées de point final par la matrice ({Cos (a), Sin (a)} {-Sin (a) Cos (a)}), où un est l'angle de rotation. Les deux nombres résultants dans la matrice seront x et y coordonnées du point final de la ligne pivotée. La rotation tourne autour du point de départ de la ligne. En simplifiant, les nouvelles coordonnées seront {x * Cos (a) - y * Sin (a)} pour x et {x * Sin (a) + y * Cos (a)} pour y.Problème rotation simple image de ligne
La tâche consiste à faire pivoter un triangle en utilisant cette méthode. Mais le code suivant qui utilise cette méthode, est de donner une merde au lieu de l'image réorientée (forme tordue de triangle original, tourné par un angle « aléatoire »):
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;
Eh bien, je suis d'idées. Qu'est-ce que je fais mal?
Merci pour votre temps.
Merci. Le problème était vraiment sur la relativité de x et y =) – Arnthor