Анимация Анимация - компьютерная имитация движения с помощью изменения (и перерисовки) формы объектов или показа последовательных изображений с фазами движения.
Анимация с использованием видеостраниц SetActivePage(n); - устанавливает активную видеостраницу SetVisualPage(n); - устанавливает отображаемую (видимую) видеостраницу Нумерация видеостраниц с 0.
Алгоритм анимации с использованием видеостраниц 1)рисуем первую фазу на одной видеостранице 2)рисуем вторую фазу на другой видеостранице 3)показываем первую видеостраницу 4)ждём 5)показываем вторую видеостраницу 6)ждём 7)переходим на шаг 3
Видеостраница 0
Видеостраница 1
Процедура Delay (задержка) delay(ms); - задерживает выполнение программы на ms миллисекунд 1 мс = 1/1000 с На современных компьютерах delay(1000) задержке на 1 с Процедура delay расположена в модуле CRT.
uses crt, graph; var … procedure DrawMan1; … { первый чел. } procedure DrawMan2; … { второй чел. } begin InitGraph …; DrawMan1; SetActivePage(1); DrawMan2; repeat delay(5000); SetVisualPage(1); delay(5000); SetVisualPage(0); until keypressed; while keypressed do readkey; CloseGraph; end.
uses crt, graph; var p: byte; … procedure DrawMan1; … { первый чел. } procedure DrawMan2; … { второй чел. } begin InitGraph …; DrawMan1; SetActivePage(1); DrawMan2; p:=0; repeat delay(5000); if p=0 then p:=1 else p:=0; SetVisualPage(p); until keypressed; while keypressed do readkey; CloseGraph; end. p:=(p + 1) mod 2;
Анимация движущихся объектов Алгоритм анимации: 1)рисуем объект в точке (x, y) 2)ждём 3)стираем объект в точке (x, y) 4)изменяем координаты (x, y) 5)переходим к шагу 1
uses crt, graph; var … begin InitGraph …; for x:=0 to GetMaxX do begin setcolor(15); circle(x,50,10); delay(5000); setcolor(0); circle(x,50,10); end; CloseGraph; end.
uses crt, graph; var … begin InitGraph …; for x:=0 to GetMaxX div 5 do begin setcolor(15); circle(x*5,50,10); delay(5000); setcolor(0); circle(x*5,50,10); end; CloseGraph; end.
(0; 0) (GetMaxX; GetMaxY) (x; y)
uses crt, graph; var … begin InitGraph …; for x:=0 to GetMaxX div 5 do begin setcolor(15); circle(x*5,round(GetMaxY/GetMaxX*x*5),10); delay(5000); setcolor(0); circle(x*5,round(GetMaxY/GetMaxX*x*5),10); end; CloseGraph; end.
Режимы вывода линий Режим Первонача льный цвет Новый цветРезультат NormalPut XORPut
Установка режима вывода линий SetWriteMode(mode); mode: NormalPut, XORPut, ANDPut, ORPut
uses crt, graph; var … begin InitGraph …; SetWriteMode(XORPut); setcolor(15); for x:=0 to GetMaxX div 5 do begin circle(x*5,50,10); delay(5000); circle(x*5,50,10); end; CloseGraph; end.
Анимация вращения линий
Полярная система координат и её связь с прямоугольной СК x y a r y x x = r * cos(a) y = r * sin(a) 0
uses crt, graph; var a: integer; begin InitGraph …; SetWriteMode(XORPut); setcolor(15); for a:=0 to 360 do begin line(GetMaxX div 2, GetMaxY div 2, GetMaxX div 2 + round(100*cos(a*pi/180)), GetMaxY div 2 – round(100*sin(a*pi/180))); delay(5000); line(GetMaxX div 2, GetMaxY div 2, GetMaxX div 2 + round(100*cos(a*pi/180)), GetMaxY div 2 – round(100*sin(a*pi/180))); end; CloseGraph; end.
Системная дата и время GetTime(h,m,s,s100); SetTime(h,m,s,s100); GetDate(y,m,d,dw); SetDate(y,m,d); Модуль DOS dw: 0 – Sunday 1 – Monday 2 – Tuesday 3 – 4 – Thursday 5 – Friday 6 - Saturday
uses crt, graph, dos; var h,m,s,s100,h1,m1,s1: word; Procedure DrawWatch; { рисование циферблата } Procedure DrawSecHand(s: word); begin line(GetMaxX div 2, GetMaxY div 2, GetMaxX div 2 + round(150*cos((90-6*s)*pi/180)), GetMaxY div 2 – round(150*sin((90-6*s)*pi/180))); end; Procedure DrawMinHand(m: word); { рисование мин. стр} Procedure DrawHourHand(h,m: word); begin line(GetMaxX div 2, GetMaxY div 2, GetMaxX div 2 + round(50*cos((90-h*30-m*0.5)*pi/180)), GetMaxY div 2 – round(50*sin((90-h*30-m*0.5)*pi/180))); end;
begin InitGraph …; DrawWatch; SetWriteMode(XORPut); GetTime(h,m,s,s100); DrawHourHand(h,m); DrawMinHand(m); DrawSecHand(s);
repeat GetTime(h1,m1,s1,s100); if s1s then begin DrawSecHand(s); if m1m then begin DrawMinHand(m); DrawHourHand(h,m); h:=h1; m:=m1; DrawHourHand(h,m); DrawMinHand(m); end; s:=s1; DrawSecHand(s); end; until keypressed; CloseGraph; End.