SpiroLaterals

- XLogo

Toadstool

Spirolaterals are created by repeating a set number of 'move forward and turn' commands. Turn angle can be positive or negative.

To New
  # set default screen, pen and turtle values
  ResetAll SetScreenSize [400 400] HideTurtle
  SetSC Black SetPC Green SetPS 1 PenUp
End

To Spir
  Make "ItemNum 1
  Repeat :Order [
    Repeat (:Order + :L) [
      Make "Dist :Size * (Item :ItemNum :Sides)
      Ribbon :Dist Wait 6
      Back :Dist Pin Forward :Dist
      If :ItemNum < (:Order + :L)
      [Make "ItemNum :ItemNum +1] [Make "ItemNum 1]
      Right :Angle ] ]
  Pin SetPC DarkRed SetPW 1 Circle 2
End

To Init
  Make "Sides [ ]
  Make "Order Pick [3 4 5 6]
  Make "Size Integer (340 / Power :Order 2)
  Make "Angle 360 / :Order
  Make "L Pick [1 -1]
  Repeat (:Order+:L) [
  Make "Sides LPut Pick [ -5 -4 -3 -2 -1 0 1 2 3 4 5] :Sides ]
End

To Display
  # write header title and footer values
  SetPC White
  SetPos [-190 180] Label "Spirolateral
  SetPos [-190 -190] Label ( List "Order: :Order :L )
  SetPos [52 -190] Label ( List "Sides: :Sides )
End

To Ribbon :Dist
  SetPC Hue2 Heading/2
  SetPenWidth 5 PenDown Forward :Dist
  PenUp Left 90 Forward 3 Left 90
  SetPC Black SetPenWidth 1 PenDown Forward :Dist
  PenUp Left 90 Forward 6 Left 90
  PenDown Forward :Dist
  PenUp Left 90 Forward 3 Right 90
End

To Pin
  SetPC Red SetPW 11 Dot Pos
  SetPC DarkRed SetPW 1 Circle 5.4
End

To Hue2 :Theta
  # Output RGB hue list from angle :Theta
  Make "Red Abs 255*Sin :Theta
  Make "Green Abs 255*Sin (:Theta+120)
  Make "Blue Abs 255*Sin (:Theta+240)
  Output (List :Red :Green :Blue)
End

To Go
  New
  Repeat 12 [
    Wash Init Display Home
    Spir Wait 200]
End

Spiro Laterals
SpiroLateral

Procedures blue
Variables pink
Comments green
Library gray