[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 : Gen. v. for n-angle in circle no rekusion  ³
   ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ *)

{ This program is general no rekusion version of this effekt.
  Program draw the n-angle in circle ... .

  Part one :     Translations

  This is nice effekt, but not so easy to undestand !
  (Please see rekpic11.pas)

       Ú  s     s              ¿
  Pt = ³- Ä , - Ä * cotg(Pi/L) ³
       À  2     2              Ù

  (See general pictute in rekpic11.pas)
  Here is rectangular triangle PsPtS.
  In general is angle = 380/(2*L) = 180/L .
  Suma angles inside = (n-2)*180 = n*180 - centre circle (2*180)
  The angle in central triangle is 180/L.
  Well, if you use rectangular triangle, we can define trigoniometry
  functions. (sinus, cosinus ...)
  We muth use here ZmenXY for absolute coordinates.
  We muth use here ZmenSmer in absolute version for nagle :

        L-2          90L - 180L - 360    90*(4-L)
   90 - ---- *180  = ---------------- =  --------
         L                  L               L

   Part two : Draw n-angle. It is just poly. Here is other mathematical
   problem. How s ?  (lenght of triangle and r for circle)
   IF you see general picture in rekpic11.pas then it is just other
   work with rectangular triangle PsPtS.
   S is just prepona. (maximal lenght in rectangular triangle)

   Part tree - Draw circle.

   This is diffycult problem. 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/L)
                                            d - lenght of dopredu in
              d = s*sin(Pi/alfa)/tg(pi/L)        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  L=6;
    Alfa=80;

Type  Mykor=object(kor)
            Procedure Config(s:real);
            Procedure poly(n:integer;s,u:real);
            Procedure triangle(s:real);
            Procedure circle(n:integer;s:real);
            Procedure draw(n:integer;s:real);
            End;

var K:Mykor;
 poc:integer;

Procedure Mykor.Config(s:real);
Begin
ph;
Zmenxy(-s/2,-s/2* (cos(pi/L) / sin(pi/L)) );
ZmenSmer(90*(4-L)/L);
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(L,s,360/L);
End;

Procedure Mykor.circle(n:integer;s:real);
Begin
Vlavo(180/L-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:=s/cos(pi/L);
             circle(Alfa,s*sin(pi/Alfa)/(sin(pi/L)/cos(pi/L)));
             dec(n);
             End;
End;

Begin
Poc:=0;

With k do Begin
          Init(0,0,0);
          Draw(8,80);
          CakajKlaves;
          Koniec;
          End;
End.

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