program pir; uses graph,crt; const piramid: array [0..14] of real = (180,100,100,150,140,100. 230,140,100,120,170,100, 200,170,100); lindex: array [0..15] of integer = (0,1,0,2,3,0,4,1,2,4,2,3,4,1,3) var xt,yt,zt:real; xan,yan,zan:real; sx,sy,sx1,sy1,p,zoom:integer; procedure draw(color:byte); begin for p:=0 to 11 do begin sx:=round(zoom*piramid[lindex[p*2]*3])+160; sy:=round(zoom*piramid[lindex[p*2]*3+1])+100; sx1:=round(zoom*piramid[lindex[p*2+1]*3])+160; sy1:=round(zoom*piramid[lindex[p*2+1]*3+1])+100; setcolor(color); line(sx,sy,sx1,sy1); end; end; procedure calc; begin for p:=0 to 7 do begin yt:=piramid[p*3+1]*cos(xan)-piramid[p*3+2]*sin(xan); zt:=piramid[p*3+1]*cos(xan)+piramid[p*3+2]*sin(xan); piramid[p*3+1]:=yt; piramid[p*3+2]:=zt; xt:=piramid[p*3]*cos(yan)-piramid[p*3+2]*sin(yan); zt:=piramid[p*3]*cos(yan)+piramid[p*3+2]*sin(yan); piramid[p*3]:=xt; piramid[p*3+2]:=zt; xt:=piramid[p*3]*cos(zan)-piramid[p*3+1]*sin(zan); yt:=piramid[p*3]*cos(zan)+piramid[p*3+1]*sin(zan); piramid[p*3]:=xt; piramid[p*3+1]:=yt; end; end; var gd,gm:integer; t:char; begin gd:=detect; initgraph(gd,gm,''); zan:=0.1; yan:=0.02; xan:=0.02; zoom:=30; repeat draw(15); delay(2000); draw(0); calc; if keypressed then begin t:=readkey; case t of '+':zoom:=zoom+1; '-':zoom:=zoom-1; end; end until t=#13; closegraph; end.