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