[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 : Spirals                                    ³
       ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ *)

    { This program draw spirals. One Nerekusive version and two rekusive
      version. In this program have one Constant Distance. This is Distance
      between two spiral levels. /-/  (- this is distance) First rekusion
      draw spirale from trm the centre.
      First rekusion : 1 part - primitive part - Nathing
                       2 part - Vlavo(60); Dopredu(s); Spirala(s+distance);
                       60 degrees = 360/6 (Level 6 of spiral)
                       Dopredu(s); Draw the line.
                       Rekusive command : Increment s with distance

      Secend rekusion : draw rekusion from end to start.
                       1 part - primitive part - Nathing
                       2 part - Dopredu(s); Vlavo(60); Spirala_rek1(s-Distance);
                       60 degrees = 360/6 (Level 6 of spiral)
                       Dopredu(s); Draw the line.
                       Rekusive command : Decrement s with distance
                       This algorithm must before rekusion rotate turtle
                       about 120 degress left. (I to / position)

      Nerekusive version : Just with cycle with repeat until. It is easy to
                           work this with Ostack.pas. }

    Uses Okor,Ostack;

    Const Distance=3;

    Type Mykor=Object(Kor)
               Procedure Spirala_No_rek(s:Real);
               Procedure Spirala_rek(s:Real);
               Procedure Spirala_rek1(s:Real);
               End;

    Procedure Mykor.Spirala_No_rek(s:Real);
    Var i:integer;
    Begin
    Repeat
    ZmenFp(random(7)+9);
    dopredu(s);
    Vlavo(60);
    s:=s+distance;
    Until s>247;
    End;

    Procedure Mykor.Spirala_rek(s:Real);
    Var i:integer;
    Begin
    If s>247 Then
             Else Begin
                  ZmenFp(random(7)+9);
                  Vlavo(60);
                  Dopredu(s);
                  Spirala_rek(s+Distance);
                  End;
    End;

    Procedure Mykor.Spirala_rek1(s:Real);
    Var i:integer;
    Begin
    If s<Distance Then
                  Else Begin
                       ZmenFp(random(7)+9);
                       Dopredu(s);
                       Vlavo(60);
                       Spirala_rek1(s-Distance);
                       End;
    End;

    Var M:MyKor;
    Begin
    With M do Begin
              Init(-320,230,0);
              Pis('Rekusion version of spirala 1.');
              PresunXY(0,0);
              Spirala_rek(1);
              CakajKlaves;
              Zmaz1;

              Init(-320,230,0);
              Pis('Rekusion version of spirala 2.');
              PresunXY(0,240);
              Vlavo(120);
              Spirala_rek1(240);
              CakajKlaves;
              Zmaz1;

              Init(-320,230,0);
              Pis('Norekusion version of spirala.');
              PresunXY(0,0);
              Spirala_No_rek(1);
              CakajKlaves;
              Koniec;
              End;

    End.

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