[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]