Доброго времени суток!
Недавно начал осваивать графику в delphi, но столкнулся с проблемой поворота изображения(созданного на компоненте image при помощи lineto и moveto) на заданный угол. Не могу сообразить как правильно написать данную процедуру.
Вот необходимый код:
procedure tform1.ship(x,y:integer;color,win:tcolor ; dx,dy:integer); // Создание корабля
begin
with image1.canvas do
begin
pen.color:=color;
pen.width:=2;
brush.Color:=color;
brush.style:=bssolid;
//korpys
moveto(x,y);
lineto (x,y-3*dy);
lineto(x+15*dx,y-3*dy);
lineto(x+10*dx,y);
lineto(x,y);
//rubka
moveto(x+3*dx,y-3*dy);
lineto(x+3*dx,y-8*dy);
lineto(x+8*dx,y-8*dy);
lineto(x+8*dx,y-3*dy);
end;
end;
procedure TForm1.Button5Click(Sender: TObject); // Задаём корабля с клавиатуры
begin
x:=strtoint(inputbox('Значение Х','Введите значения X',''));
if x>image1.ClientWidth then
begin
showmessage('Превышает ширину рамки');
exit;
end;
y:=strtoint(inputbox('Значение Y','Введите значения Y',''));
if y>image1.Clientheight then
begin
showmessage('Превышает высоту рамки');
exit;
end;
dx:=10;
dy:=10;
ship(x,y,clred,clyellow,dx,dy);
end;
procedure TForm1.Button11Click(Sender: TObject); // Та самая процедура
const a=30;
var x0,y0:integer;
begin
x0:=x+7*dx;
y0:=y-3*dy;
x:=round((x-x0)*cos(a))+round((y-y0)*sin(a))+x0;
y:=round(-(x-x0)*sin(a))+round((y-y0)*cos(a))+y0;
ship(x,y,clred,clyellow,dx,dy);
end;
Нажал на кнопку "Создать":
Нажал на кнопку "Поворот на угол":
Понимаю, что программа полный изврат, но всё же прошу помощи:)
Какие есть предложения?
Заранее благодарен за ответы.