Circles Code Listing

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

Tags: