- XLogo
Tangle curves are derived from the function:
360 * (Power :I 3) / :N
Try out the following code (copy and paste into the command line);
CS For [I 0 141] [SetH (360*(Power :I 3)/141) Forward 16]
You'll get a tangle curve of order 141.
For another curve, change both values of 141 in the above code to 1013.
So why is this program so much longer ?
Well, if you replace both values with a different number, you'll get a
new curve. However, most curves will appear too large or too small, or
be drawn off screen.
Therefore, this program includes a Fit2Screen procedure, which calculates the line length and starting position to best
fit the curve in the 400x400 window.
You can comment out the Fit2Screen procedure
to see its effect.
To New
# set default screen, pen and turtle values
ResetAll SetScreenSize [400 400] HideTurtle
SetSC Black SetPC Green SetPS 1 PenUp
End
To Tangle :N
Make "LengthNew 16
Fit2Screen :N :LengthNew # comment out to skip curve optimisation
Wash Display :N :Xcent :Ycent :LengthNew
SetXY :Xcent :Ycent PenDown
For (List "I 0 :N) [
SetPC AngCol :I :N
SetH Function :I :N Forward :LengthNew]
PenUp
End
To Fit2Screen :N :Length
Home
Make "Xmax 0 Make "Xmin 0
Make "Ymax 0 Make "Ymin 0
For (List "I 0 :N) [
SetH Function :I :N Forward :Length
If (X) > :Xmax [Make "Xmax X]
If (X) < :Xmin [Make "Xmin X]
If (Y) > :Ymax [Make "Ymax Y]
If (Y) < :Ymin [Make "Ymin Y] ]
Make "Xsize :Xmax + Abs :Xmin
Make "Ysize :Ymax + Abs :Ymin
If :Xsize=:Ysize | :Xsize>:Ysize
[Make "Size :Xsize] [Make "Size :Ysize]
Make "Scale 360/:Size
Make "LengthNew :Length*:Scale
If ((Abs (:LengthNew - :Length))>:Length/10) [
Make "Length :LengthNew Fit2Screen :N :Length]
Make "Xcent Minus (:Xmax + :Xmin)/2
Make "Ycent Minus (:Ymax + :Ymin)/2
End
To Function :I :N
Output (360*(Power :I 3)/:N)-90
End
To Display :N :Xcent :Ycent :LengthNew
# write header and footer info
SetH 0 SetPC White
SetPos [-190 184] Label [Tangle Curve]
SetPos [150 184] Label :N
SetPos [-190 -190] Label List Round :Xcent Round :Ycent
SetPos [150 -190] Label Round :LengthNew
End
To AngCol :I :N
Make "Green Round 255*(Sin 180*:I/:N)
Output ( List 255 :Green 0 )
End
To Go
# draw random tangle curves
New Forever [Tangle Random 2048 Wait 88]
End
Add the procedure GoC to draw tangle curves from order
1 onwards. Or alter to spicify your own range.
Add the procedure GoX followed by the order number to
draw a specific tangle curve. Why not try out the curve for your year
of birth?
To GoC
# draw tangle curves of order 1 to 2048
New For [N 1 2048] [Tangle :N Wait 100]
End
To GoX :N
# draw a specific tangle curve of order N
New Tangle :N
End
In the function procedure, try changing the power value from 3 (shown in red) to 5 for a whole new set of tangle
curves.
Note that a value of 1 will create closed polygons of N sides, best seen with the GoC procedure.
145
5 fold symmetry
1815 power 3
1815 power 5
Procedures blue
Variables pink
Comments green
Library gray
Visit XLogo
web site