Flocking (Perspective Demo)
Model was written in NetLogo 5.0.4
•
Viewed 606 times
•
Downloaded 70 times
•
Run 0 times
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
Comments and Questions
Click to Run Model
turtles-own [ flockmates ;; agentset of nearby turtles nearest-neighbor ;; closest one of our flockmates ] to setup clear-all crt population [ set color yellow - 2 + random 7 ;; random shades look nice set size 1.5 ;; easier to see setxy random-xcor random-ycor ] ask patches [ set pcolor green - random 2 ] reset-ticks end to go ask turtles [ flock ] ;; the following line is used to make the turtles ;; animate more smoothly. repeat 5 [ ask turtles [ fd 0.2 ] display ] ;; for greater efficiency, at the expense of smooth ;; animation, substitute the following line instead: ;; ask turtles [ fd 1 ] tick end to flock ;; turtle procedure find-flockmates if any? flockmates [ find-nearest-neighbor ifelse distance nearest-neighbor < minimum-separation [ separate ] [ align cohere ] ] end to find-flockmates ;; turtle procedure set flockmates other turtles in-radius vision end to find-nearest-neighbor ;; turtle procedure set nearest-neighbor min-one-of flockmates [distance myself] end ;;; SEPARATE to separate ;; turtle procedure turn-away ([heading] of nearest-neighbor) max-separate-turn end ;;; ALIGN to align ;; turtle procedure turn-towards average-flockmate-heading max-align-turn end to-report average-flockmate-heading ;; turtle procedure ;; We can't just average the heading variables here. ;; For example, the average of 1 and 359 should be 0, ;; not 180. So we have to use trigonometry. ;; Theoretically this could fail if both sums are 0 ;; since atan 0 0 is undefined, but in practice that's ;; vanishingly unlikely. report atan sum [dx] of flockmates sum [dy] of flockmates end ;;; COHERE to cohere ;; turtle procedure turn-towards average-heading-towards-flockmates max-cohere-turn end to-report average-heading-towards-flockmates ;; turtle procedure ;; "towards myself" gives us the heading from the other turtle ;; to me, but we want the heading from me to the other turtle, ;; so we add 180 report atan mean [sin (towards myself + 180)] of flockmates mean [cos (towards myself + 180)] of flockmates end ;;; HELPER PROCEDURES to turn-towards [new-heading max-turn] ;; turtle procedure turn-at-most (subtract-headings new-heading heading) max-turn end to turn-away [new-heading max-turn] ;; turtle procedure turn-at-most (subtract-headings heading new-heading) max-turn end ;; turn right by "turn" degrees (or left if "turn" is negative), ;; but never turn more than "max-turn" degrees to turn-at-most [turn max-turn] ;; turtle procedure ifelse abs turn > max-turn [ ifelse turn > 0 [ rt max-turn ] [ lt max-turn ] ] [ rt turn ] end ; Copyright 1998 Uri Wilensky. ; See Info tab for full copyright and license.
There are 6 versions of this model.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
Flocking (Perspective Demo).png | preview | Preview for 'Flocking (Perspective Demo)' | over 11 years ago, by Uri Wilensky | Download |
This model does not have any ancestors.
This model does not have any descendants.
taha lbd
sum [dx]!! (Question)
what's the utility of sum [dx] in the code?
Posted over 12 years ago
Jim Lyons
average heading of flock
To compute the average heading of the flock, the x- and y-components of each turtle's direction vector (a unit vector with the same heading as the turtle) are added up and used by the atan function to convert back to an angle. ave-heading = atan sum [dx] of flockmates sum [dy] of flockmates Look up dx, dy in the NL Dictionary.
Posted over 12 years ago