[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 : Shnee flake drawed with recusion           ³
       ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ *)

    {    This program draw shneeflake with rekusive from first level to
      nine. If is level higher then 9 then time for work is very large.
      It is worked in turtle graphic. (Unit Okor, static metods) Principe
      drowing : There are tree parts :
         In first part draw 1/3 of picture. Then turtle rotate 120 degrees
      right. When is first part working then are realising all rekusions.
      If you don't undestand it, then is better in MojaKor.flake in cycle
      give parameter 1 to 1, then just draw only 1/3 of picture.
         In part two (primitive case (level rekusion =1) is drawing only
      one line. (dopredu, lenght s is from input)
           In higher level how one draw -/\- (in correct rotation) in line
      one rekusive later. (for example : last level : ---- and at the present
      is -/\-. For next level - is how ---- there. The lenght there is s/3.
      Why s/3 ? Equilateral triangle is first s/3 and two lines are --. (how in
      picture -/\-) Consenguently all of lines (in picture muth have s in last
      level of rekusion. For level 1 : s=input For
                             level 2 : s=s/3

      In triangle are only two parts drawed, but one is part of line last level.
      For example :   s     /\
                    ---- = - - - s/3      3 * s/3 = s
                        s/3  I
                            s/3
      }

    Uses oKor,crt;

    Type MyKor=object(Kor)
                   Procedure Flake(n:integer; s:real);
                   Procedure Flake_pom(n:integer; s:real);
                 End;

    Procedure MyKor.Flake(n:integer; s:real);
    Var i:integer;
    Begin
      For i:=1 to 3 do Begin
                       ZmenFP(i);   {If you don't wand colors Clr this line}
                       Flake_pom(n,s);
                       Vpravo(120);
                       End;
    End;

    Procedure MyKor.Flake_pom(n:integer; s:real);
    Begin
      if n=1 then Dopredu(s)
      else
        Begin
          Flake_pom(n-1,s/3);
          Vlavo(60);
          Flake_pom(n-1,s/3);
          Vpravo(120);
          Flake_pom(n-1,s/3);
          Vlavo(60);
          Flake_pom(n-1,s/3);
        End
    End;

    Var k:MyKor;
        i:integer;

    Begin
      With k do Begin
        For i:=1 to 9 do
          Begin
            Init(-100,-200,0);
            If ukazana=true then write(#7);
            Flake(i,400);
            PresunXY(-300,230); Pis('Snee flake of level '+chr(i+48));
            CakajKlaves;
            Zmaz1;
          End;
                 Koniec;
                 End;
    End.

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