[Back to TURTLE SWAG index]  [Back to Main SWAG index]  [Original]

(* ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
   ³ Programated by Vladimir Zahoransky                        ³
   ³                Vladko software                            ³
   ³ Contact      : zahoran@cezap.ii.fmph.uniba.sk             ³
   ³ Program tema : Triangle, circle Nx no rekuzive version    ³
   ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ *)

{ This program draw circle, in triangle, in circle .... .
  First part : Ph ! You muth move the turtle in correkt position !
  Matematical relation for Pt - Point translated :
  (* L - level of n-angle *)

     A\   | D           /D   Pt[-s/2 ,-s/2*cotg(60)];
       \  |            /
        \ |    | Ps   /      Pt[-s/2 ,-s/(2*sqrt(3))
         \|    |     /
          \----|----/        Angle : 90/3=30
         B=Pt  S    C

 Pt is a point with x = -s/2 and y = -s/(2*sqrt(3)).

 Supposition : Ps is over S, because we want aquilateral triangle.
               We have rectangular triangle PsPtS.
               There Angle(PtPsS) is 360/(2*3)= 180/6 and
               PsS= -s/2*cotg(180/6) = -s/2*cotg(30).
               We muth rotate turtle in abolute angle PsPtS, not vlavo
               or vpravo !!!.

  Secend part : Pt is a centre for all triangles and circles !
  Then draw the triangle. (triangle metod) The lenght of last triangle
  is transverse (moved) for next triangle !  The lenght of s muth be 2*s.
  If is one peak of last triangle in peak of next triangle then s for last
  triangle is transverse for next triangle. The triangle is equilateral!

  Part tree : We muth draw the circle. We have s. This is averange of
              circle. We muth have a lenght for turtle for drawing in
              circumference.

              In muth is approximate relation :

              sin(alfa)<alfo<tg(alfa)         (alfa -> 0)

              Well for us is interesting sin(alfa)=tg(alfa)  (alfa -> 0)
              (Just for eliminate anomals)

              Here is interesting to use sinus sentens.

                  d             s           In program alfa = 60.
              ---------   =  --------
              sin(Pi/alfa)   tg(Pi/60)
                                           d - lenght of dopredu in
              d = s*sin(Pi/alfa)/tg(60)        circumference.

              Before we use it, you muth rotate the turtle left :
              180/L - 180/n   (n is there alfa).
              It is a angle of PtAB - alfa. (This is angle for
              eliminate anomals with tg(alfa) It is not so easy
              to undestand, but make it correkt. The effekt with
              circle is good for alfa >40.

            Then decrement level of drawing and work part 1, wihle
            n>0.

            Well, this is full documentation with math relations for this
            effekt.
}

Uses okor;

Const Alfa=95;

Type  Mykor=object(kor)
            Procedure Config(s:real);               {configuration}
            Procedure poly(n:integer;s,u:real);     {n-angle}
            Procedure triangle(s:real);             {Triangle}
            Procedure circle(n:integer;s:real);     {Circle}
            Procedure draw(n:integer;s:real);       {Draw}
            End;

var K:Mykor;
 poc:integer;

Procedure Mykor.Config(s:real);
Begin
ph;
Zmenxy(-s/2,-s/sqrt(3)/2);
Zmensmer(30);
pd;
End;

Procedure Mykor.poly(n:integer;s,u:real);
Begin
While n>0 do Begin
             Dopredu(s);
             Vpravo(u);
             Dec(n);
             End;
End;

Procedure Mykor.triangle(s:real);
Begin
poly(3,s,360/3);
End;

Procedure Mykor.circle(n:integer;s:real);
Begin
Vlavo(60-180/n);
Poly(n,s,360/n);
End;

Procedure Mykor.draw(n:integer;s:real);
Begin
While n>0 do Begin
             Inc(poc);
             Zmenfp(poc);
             Config(s);
             Triangle(s);
             s:=2*s;
             circle(alfa,s*sin(pi/alfa)/sqrt(3));
             dec(n);
             End;
End;

Begin
Poc:=0;

With k do Begin
          Init(0,0,0);
          Draw(4,50);
          Cakajklaves;
          Koniec;
          End;

End.

[Back to TURTLE SWAG index]  [Back to Main SWAG index]  [Original]