uses graph, crt; const grtegur=270.0; keskx=300; kesky=250; procedure keera(var x, y, z: real; xz, yz, xy: real); var abi: real; begin abi:=x; x:=round(x*cos(xz)-z*sin(xz)); z:=round(abi*sin(xz)+z*cos(xz)); abi:=y; y:=round(y*cos(yz)-z*sin(yz)); z:=round(abi*sin(yz)+z*cos(yz)); abi:=x; x:=round(x*cos(xy)-y*sin(xy)); y:=round(abi*sin(xy)+y*cos(xy)); end; procedure joonista_post(ax, ay, az, vx, vy, vz: real; xz, yz, xy: real); var n1x, n1y, n1z, n2x, n2y, n2z, abi: real; begin n1x:=ax-vx; n1y:=ay-vy; n1z:=az-vz; n2x:=n1x; n2y:=n1y-100; n2z:=n1z; keera(n1x, n1y, n1z, xz, yz, xy); keera(n2x, n2y, n2z, xz, yz, xy); if (n1z>0) and (n2z>0) then begin line(keskx+round(n1x*grtegur/n1z), kesky-round(n1y*grtegur/n1z), keskx+round(n2x*grtegur/n2z), kesky-round(n2y*grtegur/n2z)); circle(keskx+round(n1x*grtegur/n1z), kesky-round(n1y*grtegur/n1z), round(20*grtegur/n1z)); end; end; procedure joonista_postid(vx, vy, vz:real; xz, yz, xy:real); var kaugus: integer; begin kaugus:=500; while(kaugus<2000)do begin joonista_post(-300, 100, kaugus, vx, vy, vz, xz, yz, xy); joonista_post( 100, 100, kaugus, vx, vy, vz, xz, yz, xy); kaugus:=kaugus+100; end; end; var d, m: integer; mx, my, mz: real; {vaataja koordinaadid} sxz, syz, sxy: real; {vaatenurk} c: char; samm:real; begin d:=detect; initgraph(d, m, ''); mx:=0; my:=0; mz:=0; samm:=5; sxz:=0; syz:=0; sxy:=0; outtextxy(5, 10, 'liigutamiseks klahvid k, j, l, h, i, m, tuhik'); outtextxy(5, 20, 'keeramiseks klahvid s, d, a, f, e, x'); repeat joonista_postid(mx, my, mz, -sxz, -syz, -sxy); c:=readkey; case c of 'k':mz:=mz+samm; 'j':mz:=mz-samm; 'l':mx:=mx+samm; 'h':mx:=mx-samm; 'i':my:=my+samm; 'm':my:=my-samm; 'd':sxz:=sxz+0.01; 's':sxz:=sxz-0.01; 'e':syz:=syz-0.01; 'x':syz:=syz+0.01; 'f':sxy:=sxy+0.01; 'a':sxy:=sxy-0.01; ' ':begin mx:=mx-samm*sin(sxz); my:=my-samm*sin(syz)*cos(sxz); mz:=mz+samm*cos(syz)*cos(sxz); end; end; cleardevice; until c=chr(27); closegraph; end.