Maths

- XLogo library of procedures

These procedures can be copied and pasted into the Editor window as usual. Most do not produce any graphics. To test type Test. The results will show in the History window.

Decimal to Binary
Return an 8 bit binary number.
Used in CALine and Hexagram.

To Dec2Bin :Num
# convert decimal number Num to an 8 item binary list
If :Num >255 [Print [Rule is too large!] Stop]
LocalMake "Bin []
For [C 7 0 -1] [
LocalMake "Bin LPut (Quotient :Num Power 2 :C) :Bin
LocalMake "Num :Num -((Power 2 :C) *Last :Bin)]
Output :Bin
End

To Test :Num
# test procedure
Print (Sentence [Binary value of] :Num [is] Dec2Bin :Num)
End

DistanceBetween
Return the distance between two points.

To DistanceBetween :Point1 :Point2
# return distance between two points
LocalMake "Hor (First :Point1) -(First :Point2)
LocalMake "Ver (Last :Point1) -(Last :Point2)
Output SqRt ((Power :Hor 2) +(Power :Ver 2))
End

To Test
# test procedure
Make "Point1 [1 1] Make "Point2 [4 5]
Print (Sentence [The distance between point (] :Point1 [)
and point (] :Point2 [) is] DistanceBetween :Point1 :Point2)
End

Even (also see Odd)
Return True if :Num is even, else return False.
Used in Bulge, CloverArt, Grid and Marbles.

To Even? :Num
# return 'true' if Num even, else return 'false'
If (Mod :Num 2)=0 [Output "True] [Output "False]
End

To Test :A
# test procedure
If Even :A [Print (Sentence :A [is even]) ] [Print (Sentence :A [is odd]) ]
End

Least (also see Most)
Return the lowest of two values.

To Least :I :J
# return lowest value
If Before :I :J [Output :I] [Output :J]
End

To Test
# test procedure
Make "A 12 Make "B 22
Print (Sentence [The lowest value of] :A [and] :B [is] Least :A :B)
End

Most (also see Least)
Return the highest of two values.

To Most :I :J
# return greatest value
If Before :I :J [Output :J] [Output :I]
End

To Test
# test procedure
Make "A 12 Make "B 22
Print (Sentence [The highest value of] :A [and] :B [is] Most :A :B)
End

Odd (also see Even)
Return True if :Num is odd, else returns False.
Used in LSystem.

To Odd? :Num
# return 'true' if Num odd, else return 'false'
If Not (Mod :Num 2) = 0 [Output "True] [Output "False]
End

To Test :A
# test procedure
Make "A 42
If Odd :A [Print (Sentence :A [is even]) ] [Print (Sentence :A [is odd]) ]
End

Polar to Rectangular
Return rectangular x y coordinates from polar r theta coordinates.
Used in Butterfly, ElasticGrid and PolarTwist.

# convert polar to rectangular co-ordinates
Output List :X :Y
End

To Test
# test procedure
Make "R 42 Make "Theta 30
Print (Sentence [X Y co-ordinates are:] PtoR :R :Theta)
End

Rectangular to Polar
Return polar 'r theta' coordinates from rectangular x y coordinates.
Used in ElasticGrid.

To RtoP :X :Y
# convert rectangular to polar co-ordinates
LocalMake "Dist Sqrt ((Power :X 2) +(Power :Y 2))
If :X<0 [Output List :Dist 180 +ATan :Y/:X] [
# else :X >0
If :Y<0 [Output List :Dist 360 +ATan :Y/:X]
[Output List :Dist ATan :Y/:X]]
# else :X =0
If :Y<=0 [Output List :Dist 270] [Output List :Dist 90]
End

To Test
# test procedure
Make "X 30 Make "Y 40
Print (Sentence [r theta co-ordinates are:] RtoP :X :Y)
End

Rectangular to Polar 2
Return polar 'r theta' coordinates from rectangular x y coordinates. Uses a second turtle and no ArcTangent function.
Used in ElasticGrid.

To RtoP :X :Y
# use a second turtle to convert rectangular to polar co-ordinates
SetTurtle 1 PenUp SetXY :X :Y
LocalMake "RadDist Sqrt ((Power :X 2)+(Power :Y 2))
End

To Test
# test procedure
Make "X 30 Make "Y 40
Print (Sentence [r theta co-ordinates are:] RtoP :X :Y)
End

Root2
Return squareroot of 2.

To Root2
Output SqRt 2     # return sqrt of 2 (approx 1.414)
End

Root3
Return squareroot of 3.

To Root3
Output SqRt 3     # return sqrt of 3 (approx 1.732)
End

Sign
Return sign of number (+1 if positive or -1 if negative or zero). Not to be confused with Sine. By convention, Sign of zero is 1.
Used in Hop.

To Sign :Num
# return sign (-1 or 1) of number
If :Num < 0 [Output Minus 1] [Output 1]
End

XLogo