Flocking (Perspective Demo)

Flocking (Perspective Demo) preview image

1 collaborator

Uri_dolphin3 Uri Wilensky (Author)



Tagged by Reuven M. Lerner about 7 years ago

Model group CCL | Visible to everyone | Changeable by group members (CCL)
Model was written in NetLogo 5.0.4 • Viewed 392 times • Downloaded 32 times • Run 0 times
Download the 'Flocking (Perspective Demo)' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)

Comments and Questions

sum [dx]!! (Question)

what's the utility of sum [dx] in the code?

Posted over 8 years ago

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 8 years ago

Click to Run Model

turtles-own [
  flockmates         ;; agentset of nearby turtles
  nearest-neighbor   ;; closest one of our flockmates

to setup
  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 ]

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 ]

to flock  ;; turtle procedure
  if any? flockmates
    [ find-nearest-neighbor
      ifelse distance nearest-neighbor < minimum-separation
        [ separate ]
        [ align
          cohere ] ]

to find-flockmates  ;; turtle procedure
  set flockmates other turtles in-radius vision

to find-nearest-neighbor ;; turtle procedure
  set nearest-neighbor min-one-of flockmates [distance myself]


to separate  ;; turtle procedure
  turn-away ([heading] of nearest-neighbor) max-separate-turn


to align  ;; turtle procedure
  turn-towards average-flockmate-heading max-align-turn

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


to cohere  ;; turtle procedure
  turn-towards average-heading-towards-flockmates max-cohere-turn

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


to turn-towards [new-heading max-turn]  ;; turtle procedure
  turn-at-most (subtract-headings new-heading heading) max-turn

to turn-away [new-heading max-turn]  ;; turtle procedure
  turn-at-most (subtract-headings heading new-heading) max-turn

;; 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 ]

; Copyright 1998 Uri Wilensky.
; See Info tab for full copyright and license.

There are 6 versions of this model.

Uploaded by When Description Download
Uri Wilensky about 7 years ago Updated to NetLogo 5.0.4 Download this version
Uri Wilensky almost 8 years ago Updated version tag Download this version
Uri Wilensky over 8 years ago Updated to NetLogo 5.0 Download this version
Uri Wilensky about 10 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky about 10 years ago Model from NetLogo distribution Download this version
Uri Wilensky about 10 years ago Flocking (Perspective Demo) Download this version

Attached files

File Type Description Last updated
Flocking (Perspective Demo).png preview Preview for 'Flocking (Perspective Demo)' over 7 years ago, by Uri Wilensky Download

This model does not have any ancestors.

This model does not have any descendants.