Pursuit Curve

- XLogo


Pursuit curves are formed when one object chases after another, for instance a dog after a rabbit.

In this program a number of turtles are created round the edge of a circle. Each turtle faces the turtle on it's immeadiate left. Then each one in turn steps towards its target. As the target turtle is also moving an inward spiral or pursuit curve results.
The program halts when the turtles reach the centre.

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

To Init :N
  If :N <2 [Print [Need more than one turtle!] Stop]
  Repeat :N [
    SetTurtle RepCount
    Make "Angle RepCount*360/:N
    SetPC Hue :Angle PenUp
    Make "Dist 190 If :N=4 [Make "Dist 260] If :N=8 [Make "Dist 200]
    Left 180/:N +:Angle Back :Dist PenDown]

To Hue :Theta
  # Output RGB hue list from angle :Theta
  Make "Red Round 127.5*(1+Sin :Theta)
  Make "Green Round 127.5*(1+Sin (:Theta+120))
  Make "Blue Round 127.5*(1+Sin (:Theta+240))
  Output (List :Red :Green :Blue)

To Go :N
  New SetTurtlesMax :N+1 Init :N
  Make "Count 0
  While [(Distance [0 0]) >2] [
    Repeat :N [
      SetTurtle RepCount Make "myPos Pos
      If RepCount+1 >:N
        [SetTurtle 1] [SetTurtle RepCount+1]
      If :Count=Integer :Count
        [Make "thisPos Pos SetPos :myPos SetPos :thisPos]
        [SetH Towards :myPos Forward 2 Wait 1] ]
    Make "Count :Count+0.1]

To run, enter go 4, go 7 etc for increasing number of turtles.

Pursuit Curve
Pursuit Curve

Procedures blue
Variables pink
Comments green
Library gray