Информатика -продвинутый курс



         

РАБОТА С ГРАФИКОЙ - часть 7


Визуальная страница обычно пассивна, т.е. на ней нельзя выполнять графические процедуры. Другую страницу можно объявить активной с помощью процедуры setactivepage(номep). Активная страница невидима для пользователя. На ней можно подготовить другой рисунок. В следующий момент можно поменять роли страниц, т.е. визуальную сделать активной и невидимой и на ней рисовать следующий кадр, а бывшую активную сделать визуальной и показать объект в новом месте экрана.

В программе helicopter с помощью страниц моделируется вращение винтов вертолета. Две процедуры verti и vert2 подготавливают рисунки вертолета с разным положением винтов. Изображения выводятся на разные страницы, которые потом по очереди становятся то видимыми, то активными.

В программе организовано также движение вертолета по эллиптической орбите. Центр орбиты - точка (х0,у0) - располагается в центре экрана, числа а=250 и b=130 -горизонтальная и вертикальная полуоси эллипса. Положение вертолета на орбите 'вычисляется по формулам

u=x0+round(a*cosp), t=y0+round(b*sinp),

где р - чекущии угол, образованный радиус-вектором точки эллипса с осью абсцисс.

Программа 34

program helicopter;

uses crt,graph;

const step=0.01;

var gd,gm,u,t,z,k,xO,yorc,ac,vi:integer; p,a,b:real;

procedure vertl(x,у:integer) ;

begin

cleardevice; setcolor(14);

setlinestyle (0,0,1); setfillstyle(1,3) ;

line(x+12,y,x+36,y);line(x+24,y,x+24,y+8) ;

fillellipse(x+24,y+14,12,7); moveto(x+18,y+20);

lineto(x,y+20); lineto(x,y+14);

line(x+18.y+28,x+30,y+28); line(x+24,y+27,x+24,y+21) ;

end;

procedure vert2(x,у:integer);

begin

cleardevice; setcolor(14);

setlinestyle(0.0,1); setfillstyle(1,3) ;

line(x+22,y,x+26,y); line(x+24,у,x+24,y+8) ;

fillellipse(x+24,y+14,12,7); moveto(x+18,y+20) ;

lineto(x,y+20); lineto(x,y+14) ;

line(x-3,y+14,x+3,y+14); line(x+24,y+27,x+24,y+21) ;

line(x+18,y+28.x+30,y+28);

end;

begin

gd:=vga; gm:=vgamed; initgraph(gd,gm,' ');

x0:=getmaxx div 2; y0:=getmaxy div 2;

z:=l; p:=pi; a:=250; b:=130; ac:=0; vi:=l;

for k:=l to 800 do

begin u:=x0+round(a*cos(р)); t:=y0-round(b*sin(p));

• setactivepage(ac); setvisualpage(vi);

if z=l then vertl(u,t) else vert2(u,t); z:=-z;

delay(50); p:=p+step; c:=ac; ac:=vi; vi:=c:

end; closegraph

end.




Содержание  Назад  Вперед