[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 : Triangle, circle Nx no rekuzive version ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ *)
{ This program draw circle, in triangle, in circle .... .
First part : Ph ! You muth move the turtle in correkt position !
Matematical relation for Pt - Point translated :
(* L - level of n-angle *)
A\ | D /D Pt[-s/2 ,-s/2*cotg(60)];
\ | /
\ | | Ps / Pt[-s/2 ,-s/(2*sqrt(3))
\| | /
\----|----/ Angle : 90/3=30
B=Pt S C
Pt is a point with x = -s/2 and y = -s/(2*sqrt(3)).
Supposition : Ps is over S, because we want aquilateral triangle.
We have rectangular triangle PsPtS.
There Angle(PtPsS) is 360/(2*3)= 180/6 and
PsS= -s/2*cotg(180/6) = -s/2*cotg(30).
We muth rotate turtle in abolute angle PsPtS, not vlavo
or vpravo !!!.
Secend part : Pt is a centre for all triangles and circles !
Then draw the triangle. (triangle metod) The lenght of last triangle
is transverse (moved) for next triangle ! The lenght of s muth be 2*s.
If is one peak of last triangle in peak of next triangle then s for last
triangle is transverse for next triangle. The triangle is equilateral!
Part tree : We muth draw the circle. We have s. This is averange of
circle. We muth have a lenght for turtle for drawing in
circumference.
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/60)
d - lenght of dopredu in
d = s*sin(Pi/alfa)/tg(60) 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 Alfa=95;
Type Mykor=object(kor)
Procedure Config(s:real); {configuration}
Procedure poly(n:integer;s,u:real); {n-angle}
Procedure triangle(s:real); {Triangle}
Procedure circle(n:integer;s:real); {Circle}
Procedure draw(n:integer;s:real); {Draw}
End;
var K:Mykor;
poc:integer;
Procedure Mykor.Config(s:real);
Begin
ph;
Zmenxy(-s/2,-s/sqrt(3)/2);
Zmensmer(30);
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(3,s,360/3);
End;
Procedure Mykor.circle(n:integer;s:real);
Begin
Vlavo(60-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:=2*s;
circle(alfa,s*sin(pi/alfa)/sqrt(3));
dec(n);
End;
End;
Begin
Poc:=0;
With k do Begin
Init(0,0,0);
Draw(4,50);
Cakajklaves;
Koniec;
End;
End.
[Back to TURTLE SWAG index] [Back to Main SWAG index] [Original]