Dimentre
@Dimentre
Начинающий

Как осуществить поворот на заданных угол изображения?

Доброго времени суток!
Недавно начал осваивать графику в 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;


Нажал на кнопку "Создать":
c78bada2072c466eb594c631dd6de9c1.png

Нажал на кнопку "Поворот на угол":
de5cb97abab247a4b8f316245a1ec847.png

Понимаю, что программа полный изврат, но всё же прошу помощи:)
Какие есть предложения?
Заранее благодарен за ответы.
  • Вопрос задан
  • 682 просмотра
Решения вопроса 1
bobrovskyserg
@bobrovskyserg
Ты меняешь координату только начальной точки рисунка.
Перепиши tform1.ship так, чтобы в каждом вызове moveto/lineto использовались преобразованные координаты (или напиши для этих функций обёртки, подменяющие координаты).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы