Maths

- XLogo library of procedures

xlogo

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.

Download library of math procedures.

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.

To PtoR :RadDist :Theta
  # convert polar to rectangular co-ordinates
  LocalMake "X :RadDist *Sin :Theta
  LocalMake "Y :RadDist *Cos :Theta
  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))
  SetHeading Towards [0 0]
  LocalMake "myHeading Mod Int (Heading+180) 360 SetTurtle 0
  Output List :RadDist :myHeading
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
XLogo