Нарисовать вращение квадрата вокруг своей вершины — Pascal(Паскаль)

uses crt,graph;
{Поворот точки вокруг цнтра х0,у0 на а градусов}
procedure Vrash(a:real;var x,y:integer;const x0,y0:integer);
var  px:integer;
begin
x:=x-x0;
y:=y-y0;
a:=a*pi/180;
px:=x;
x:=round(x*cos(a)-y*sin(a))+x0;
y:=round(y*cos(a)+px*sin(a))+y0;
end;
const Width=150; {размеры прямоугольника}
      Haight=120;
var gd,gm:integer;{параметры входа в граф. режим}
    ch:char;    {символ для выхода из программы}
    ax,ay,bx,by,cx,cy,dx,dy:integer;{заданные координаты 4х точек}
    tbx,tby,tcx,tcy,tdx,tdy:integer;{текущие координаты 3х вращающихся точек}
    a:real; {угол поворота}
begin
initgraph(gd,gm,'');
{начальное положение прямоугольника}
ax:=GetmaxX div 2;ay:=GetmaxY div 2;
bx:=ax+Width;by:=ay;
cx:=ax+Width; cy:=ay+Haight;
dx:=ax; dy:=ay+Haight;
a:=0;
outtextxy(300,20,'Vyhod Esc...');
repeat
delay(10);{задержка, можно менять}
setfillstyle(solidfill,0);
Bar(0,40,640,480);{очищаем область анимации}
tbx:=bx;tby:=by;Vrash(a,tbx,tby,ax,ay);{определяем текущие координаты}
tcx:=cx;tcy:=cy;Vrash(a,tcx,tcy,ax,ay);
tdx:=dx;tdy:=dy;Vrash(a,tdx,tdy,ax,ay);
setcolor(4);{цвет линий}
moveto(ax,ay);{рисуем 4 линии}
lineto(tbx,tby);
lineto(tcx,tcy);
lineto(tdx,tdy);
lineto(ax,ay);
a:=a+1;{увеличиваем угол}
if keypressed then
ch:=readkey;
until ch=#27; {выход по нажатию Esc}
end.

Leave a Comment

5 + 3 =