Как нарисовать прямоугольник, изменить его координаты и нарисовать заново уже без первого прямоугольника? - Free Pascal
Формулировка задачи:
Как нарисовать прямоугольник, изменить его координаты и нарисовать заного уже без первого прямоугольника?
Решение задачи: «Как нарисовать прямоугольник, изменить его координаты и нарисовать заново уже без первого прямоугольника?»
textual
Листинг программы
program MovingFlag; uses graph, wincrt, math; const Left = chr(97); Right = chr(100); Stop = ' '; var x1, y1, x2, y2, x3, y3, x4, y4: real; rad: real; key: char; i: integer; procedure initializeGraph; var gd, gm: integer; begin gd:=detect; initGraph(gd, gm, ''); if graphresult<0 then begin writeln('Error.'); halt; end; end; procedure drawFlag(x2:real; y2:real; x3:real; y3:real; x4:real; y4:real); begin moveto(round(x1), round(y1)); lineto(round(x2), round(y2)); lineto(round(x3), round(y3)); lineto(round(x4), round(y4)); end; begin initializeGraph; setwritemode(XORPut); x1:=getmaxx div 2; y1:=getmaxy div 2; x2:=getmaxx div 2; y2:=y1 - 200; x3:=x2 + 50; y3:=y2 + 25; x4:=getmaxx div 2; y4:=y3 + 25; drawFlag(x2, y2, x3, y3, x4, y4); repeat if keypressed then begin key:=readkey; case key of Left: begin inc(i); rad:=((1*PI)/180)*(-1); x2:=x2*(cos(rad))-y2*(sin(rad))+(x1*(1-cos(rad)))+y1*(sin(rad)); y2:=y2*(cos(rad))+x2*(sin(rad))+(y1*(1-cos(rad)))-x1*(sin(rad)); x3:=x3*(cos(rad))-y3*(sin(rad))+(x1*(1-cos(rad)))+y1*(sin(rad)); y3:=y3*(cos(rad))+x3*(sin(rad))+(y1*(1-cos(rad)))-x1*(sin(rad)); x4:=x4*(cos(rad))-y4*(sin(rad))+(x1*(1-cos(rad)))+y1*(sin(rad)); y4:=y4*(cos(rad))+x4*(sin(rad))+(y1*(1-cos(rad)))-x1*(sin(rad)); drawFlag(x2, y2, x3, y3, x4, y4); end; Right: begin inc(i); rad:=(1*PI)/180; x2:=x2*(cos(rad))-y2*(sin(rad))+(x1*(1-cos(rad)))+y1*(sin(rad)); y2:=y2*(cos(rad))+x2*(sin(rad))+(y1*(1-cos(rad)))-x1*(sin(rad)); x3:=x3*(cos(rad))-y3*(sin(rad))+(x1*(1-cos(rad)))+y1*(sin(rad)); y3:=y3*(cos(rad))+x3*(sin(rad))+(y1*(1-cos(rad)))-x1*(sin(rad)); x4:=x4*(cos(rad))-y4*(sin(rad))+(x1*(1-cos(rad)))+y1*(sin(rad)); y4:=y4*(cos(rad))+x4*(sin(rad))+(y1*(1-cos(rad)))-x1*(sin(rad)); drawFlag(x2, y2, x3, y3, x4, y4); delay(100); drawFlag(x2, y2, x3, y3, x4, y4); end; Stop: begin delay(3000); halt; end; end; end; until (1=0); end.
Объяснение кода листинга программы
Вот что делает программа:
- Вводит координаты прямоугольника и записывает их в переменные
x1
,y1
,x2
,y2
,x3
,y3
,x4
,y4
. - Рисует прямоугольник с помощью процедуры
drawFlag
, передавая ей координаты прямоугольника. - Затем программа ожидает нажатия клавиш
Left
илиRight
и в зависимости от нажатой клавиши изменяет координаты прямоугольника и рисует его заново. - Если нажата клавиша
Left
, то координаты прямоугольника изменяются так, чтобы он переместился влево. - Если нажата клавиша
Right
, то координаты прямоугольника изменяются так, чтобы он переместился вправо. - Если нажата клавиша
Stop
, то программа ждет 3 секунды и завершается.