Утверждается, что для поворота линии на определенный угол вы умножаете координаты ее конечной точки на матрицу ({Cos (a), Sin (a)} {-Sin (a) Cos (a)}) где a - угол поворота. Результирующие два числа в матрице будут x и y координатами конечной точки повернутой линии. Вращение идет вокруг начальной точки линии.
Упрощая его, новые координаты будут {x * Cos (a) - y * Sin (a)} для x и {x * Sin (a) + y * Cos (a)} для y.
Задача - повернуть треугольник, используя этот метод. Но следующий код, который использует этот метод, выдает немного дерьма вместо повернутого изображения (искривленная форма исходного треугольника, повернутого на «случайный» угол):
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;
Ну, у меня нет идей. Что я делаю не так?
Спасибо за ваше время.