program hex;
{$Igraphlib.pas}
          var ct30,ecentric : real;

procedure cirhex(uu,vv,r: real);
       var x1, x2, y1, y2, t :  real;
           step              :  integer;
     begin
     step:=3;
     x1:= uu + r ;
     y1:= vv*ecentric ;
     t:= pi/step;
     repeat
           x2:=uu + r * cos(t);   y2:=vv + r * sin(t); y2:=y2*ecentric;
           drawline(x1,y1,x2,y2,white);
           x1:=x2;   y1:=y2;
           t:=t + pi/step;
     until t >= 2*pi;
     end;
procedure hexa(u,v,r:real;n:integer);
          var    i      :   integer;
              u1,v1,t   :   real   ;
          begin

          if n > 0 then
                 begin
                 cirhex(u,v,r);
                 for i:=0 to 5 do
                     begin
                     t:=pi/6*(1+2*i);
                     u1:=u+r*cos(t)*ct30 ;
                     v1:=v+r*sin(t)*ct30 ;
                     if keypressed then exit;
                     hexa(u1,v1,r/2,n-1);
                     end;
                 end;
          end;

begin
      hires;
      setwindow(-100,-100,100,100);
      setviewport(1,1,80,25);
      useviewport;
      ct30:=cos(pi/6);
      ecentric:=1.5*(v2-v1)/(u2-u1) ;
      hexa(0,0,50,3);
end.

