{26.8.2003
Jozef Sivek ml.}
program eli002;
uses graph,crt;
type pole_v=array[1..3] of real;
var  gd,gm,xb,yb,zb,h,cvok:integer;
     vektorp,vektorpright,vektorpup,P:pole_v;{P=pozorovatel}
     dp,dright,dup,absp,abspright,abspup:real;

procedure d;
     begin
     dp:=-vektorp[1]*P[1]-vektorp[2]*P[2]-vektorp[3]*P[3];
     dright:=-vektorpright[1]*P[1]-vektorpright[2]*P[2]-vektorpright[3]*P[3];
     dup:=-vektorpup[1]*P[1]-vektorpup[2]*P[2]-vektorpup[3]*P[3];
     absp:=sqrt(vektorp[1]*vektorp[1]+vektorp[2]*vektorp[2]+vektorp[3]*vektorp[3]);
     abspright:=sqrt(vektorpright[1]*vektorpright[1]+vektorpright[2]*vektorpright[2]+vektorpright[3]*vektorpright[3]);
     abspup:=sqrt(vektorpup[1]*vektorpup[1]+vektorpup[2]*vektorpup[2]+vektorpup[3]*vektorpup[3]);
     end;

procedure longline(ax,ay,bx,by,l:integer);
     type pole=array[1..2] of integer;
     var u:pole;
     i:real;
     begin
     u[1]:=bx-ax;
     u[2]:=by-ay;
     i:=l/sqrt( sqr(u[1])+sqr(u[2]) );
     u[1]:=round(u[1]*i);
     u[2]:=round(u[2]*i);
     line(ax,ay,ax+u[1],ay+u[2]);
     end;
     {800-900}

procedure px3d(x,y,z:real);
     var i,lp,lpright,lpup:real;
     begin
     lp:=(vektorp[1]*x+vektorp[2]*y+vektorp[3]*z+dp)/(sqrt(absp));
     lpright:=(vektorpright[1]*x+vektorpright[2]*y+vektorpright[3]*z+dright)/(sqrt(abspright));
     lpup:=(vektorpup[1]*x+vektorpup[2]*y+vektorpup[3]*z+dup)/(sqrt(abspup));
     if lp<=0 then if lp=0 then lp:=0.1
                           else lp:=-lp;
     i:=800/lp;
     line(round(i*lpright)+320,240-round(i*lpup),round(i*lpright)+320,240-round(i*lpup));
     end;

procedure line3d(x,y,z,x2,y2,z2:real);
     var i,lp,lpright,lpup:real;
         a,b:integer;
     begin

{     dp:=-vektorp[1]*P[1]-vektorp[2]*P[2]-vektorp[3]*P[3];
     dright:=-vektorpright[1]*P[1]-vektorpright[2]*P[2]-vektorpright[3]*P[3];
     dup:=-vektorpup[1]*P[1]-vektorpup[2]*P[2]-vektorpup[3]*P[3];
     absp:=sqrt(vektorp[1]*vektorp[1]+vektorp[2]*vektorp[2]+vektorp[3]*vektorp[3]);
     abspright:=sqrt(vektorpright[1]*vektorpright[1]+vektorpright[2]*vektorpright[2]+vektorpright[3]*vektorpright[3]);
     abspup:=sqrt(vektorpup[1]*vektorpup[1]+vektorpup[2]*vektorpup[2]+vektorpup[3]*vektorpup[3]);

 }


     lp:=(vektorp[1]*x+vektorp[2]*y+vektorp[3]*z+dp)/(sqrt(absp));
     lpright:=(vektorpright[1]*x+vektorpright[2]*y+vektorpright[3]*z+dright)/(sqrt(abspright));
     lpup:=(vektorpup[1]*x+vektorpup[2]*y+vektorpup[3]*z+dup)/(sqrt(abspup));
     if lp<=0 then if lp=0 then lp:=0.1
                           else lp:=-lp;

     i:=200/lp;
     a:=round(i*lpright)+320;
     b:=240-round(i*lpup);

     lp:=(vektorp[1]*x2+vektorp[2]*y2+vektorp[3]*z2+dp)/(sqrt(absp));
     lpright:=(vektorpright[1]*x2+vektorpright[2]*y2+vektorpright[3]*z2+dright)/(sqrt(abspright));
     lpup:=(vektorpup[1]*x2+vektorpup[2]*y2+vektorpup[3]*z2+dup)/(sqrt(abspup));
     if lp<=0 then if lp=0 then lp:=0.1
                           else lp:=-lp;
     i:=200/lp;
     line(a,b,round(i*lpright)+320,240-round(i*lpup));
     end;

begin
{-[]-}
gd:=detect;
InitGraph(gd, gm, 'c:/bp/bgi');
if GraphResult <> grOk then Halt(1);
{-[]-}
vektorp[1]:=0;
vektorp[2]:=1;
vektorp[3]:=0;
vektorpright[1]:=1;
vektorpright[2]:=0;
vektorpright[3]:=0;
vektorpup[1]:=0;
vektorpup[2]:=0;
vektorpup[3]:=1;
P[1]:=0;
P[2]:=0;
P[3]:=0;
d;
{h:=-1;
repeat
h:=h+1;
if h=40 then h:=0;
 for xb:=-12 to 8 do begin
 for zb:=-6 to 8 do begin
 setcolor(15);
                         line3d(xb+h/10,2,zb-h/40,xb+h/10,5,zb-h/40);
 end;
 end;
 delay(10);
 clearviewport;
 until Keypressed;  }
h:=0;
cvok:=-1;
repeat
h:=h+cvok;
if h=-40 then cvok:=-cvok;
if h=40 then cvok:=-cvok;
P[2]:=h;
d;
line3d(-5,5,-5,5,5,-5);
line3d(-5,5,5,5,5,5);
line3d(5,5,5,5,5,-5);
line3d(-5,5,5,-5,5,-5);
line3d(5,5,5,5,15,5);
line3d(5,5,-5,5,15,-5);
line3d(-5,5,-5,-5,15,-5);
line3d(-5,5,5,-5,15,5);
line3d(-5,15,-5,5,15,-5);
line3d(-5,15,5,5,15,5);
line3d(5,15,5,5,15,-5);
line3d(-5,15,5,-5,15,-5);
delay(0);
clearviewport;
until Keypressed;
{yb:=4;
zb:=-2;
h:=0;

for xb:=0 to 2000 do begin
                    line3d(zb+10,(xb)*5,yb,zb+14,(xb)*5,yb);
                    end;
                    delay(0);}
readln;
 CloseGraph;
end.
