Circle Code
to hatch :num :prefix
let [ci 5]
dotimes [i :num] [newturtle word :prefix :i seth (360 / :num) * :i setc :ci + (:i * 10)
if (remainder :i 14) = 0 [make "ci :ci + 1] ]
end
to demo
let [scale desired-distance]
hatch num "a
everyone [ setpos [0 -30] fd 15 * :scale seth 0 pd fd 50 * :scale]
everyone [repeat 36 [fd 2 * :scale rt 10]]
end
to cdemo
hatch num "a
everyone [pd fd 90 st]
end
to removeall
everyone [remove who]
clean
end
;;
;;
;; begin circle code
;;
;; project variables: total-turtles
;;
;; turtles own: next-turtle
;; prev-turtle
;; heading-1
;; dist-1
;; heading-2
;; dist-2
;; repel-turtle
;;
to turtle-setup
setc "red
setsh "circle
seth random 360 fd random startdist
st
setnext-turtle word "a 1 + bf who
if not (bf next-turtle) < total-turtles [setnext-turtle "a0]
setprev-turtle word "a ((bf who) - 1)
if (bf prev-turtle) < 0 [setprev-turtle word "a total-turtles - 1]
end
to adjust
towards next-turtle
setheading-1 heading
setdist-1 (convergence / 100) * ((distance next-turtle) - desired-distance)
towards prev-turtle
setheading-2 heading
setdist-2 (convergence / 100) * ((distance prev-turtle) - desired-distance)
seth heading-1
fd dist-1
seth heading-2
fd dist-2
end
to repel
setrepel-turtle word "a random total-turtles
towards repel-turtle
bk repel-strength / 100
end
to setup
hatch num "a
settotal-turtles num
everyone [turtle-setup]
end
to allAdjust
everyone [launch[adjust]]
end
to allRepel
everyone [launch [repel]]
end
;;
;; initit is only used to initially setup the project variable and the
;; turtle's own variables.
;;
to initit
dolist [i [next-turtle prev-turtle heading-1 dist-1 heading-2 dist-2 repel-turtle]] [ turtlesown :i]
createprojectvar "total-turtles
end