Boids: Difference between revisions
Content added Content deleted
(→{{header|Java}}: added Java) |
(reorganized task description) |
||
Line 1: | Line 1: | ||
{{draft task}} |
{{draft task}} |
||
This task requires the creation of a graphical or purely textual |
A [[wp:Boids|Boids]] algorithm simulates the flocking behaviour of birds. This task requires the creation of a graphical or purely textual simulation of a flock of birds navigating the cave with obstacles depicted below. |
||
⚫ | |||
⚫ | |||
⚫ | If you implement a purely textual simulation, this is a possible board representation, where "O" are the boids that should go toward the right, "#" are fixed walls that should be avoided by the boids, and "." is free space (using a space is also acceptable for free space, if you add some kind of frame around the board). |
||
<pre>.......###############............................................................... |
<pre>.......###############............................................................... |
||
Line 24: | Line 19: | ||
............................................................#################........</pre> |
............................................................#################........</pre> |
||
⚫ | If you implement a purely textual simulation, this is a possible board representation, where "O" are the boids that should go toward the right, "#" are fixed walls that should be avoided by the boids, and "." is free space (using a space is also acceptable for free space, if you add some kind of frame around the board). |
||
⚫ | |||
The board was generated by this simple Python code: |
|||
<lang python>from array import array |
|||
from math import hypot |
|||
nx = 85 |
|||
ny = 16 |
|||
background = '.' |
|||
foreground = '#' |
|||
mat = [array("c", background) * nx for _ in xrange(ny)] |
|||
def add_circle(mat, (cx, cy, r)): |
|||
for y in xrange(cy - r, cy + r + 1): |
|||
for x in xrange(cx - r, cx + r + 1): |
|||
if hypot(cx - x, cy - y) <= r: |
|||
if x >= 0 and x < len(mat[0]) and y >= 0 and y < len(mat): |
|||
mat[y][x] = foreground |
|||
for c in [(14, 2, 8), (nx / 2, ny / 2, 3), (nx - 17, ny - 2, 9)]: |
|||
add_circle(mat, c) |
|||
for row in mat: |
|||
print row.tostring()</lang> |
|||
⚫ | |||
<br><br> |
|||
⚫ | |||
⚫ | |||
* http://natureofcode.com/book/chapter-6-autonomous-agents/ |
|||
<br><br> |
|||
=={{header|C}}== |
=={{header|C}}== |
||
See [[Boids simulation/C]] |
See [[Boids simulation/C]] |
Revision as of 20:34, 22 April 2016
Boids is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
A Boids algorithm simulates the flocking behaviour of birds. This task requires the creation of a graphical or purely textual simulation of a flock of birds navigating the cave with obstacles depicted below.
.......###############............................................................... .......###############............................................................... ......#################.............................................................. O......###############............................................................... OO.....###############............................................................... OO.....###############....................#.........................#................ OO......#############...................#####...................#########............ OO......#############...................#####..................###########........... OO.......###########...................#######................#############.......... OO.........#######......................#####................###############......... OO............#.........................#####...............#################........ OO........................................#.................#################........ O...........................................................#################........ ............................................................#################........ ...........................................................###################....... ............................................................#################........
If you implement a purely textual simulation, this is a possible board representation, where "O" are the boids that should go toward the right, "#" are fixed walls that should be avoided by the boids, and "." is free space (using a space is also acceptable for free space, if you add some kind of frame around the board).
A simulation that doesn't contain obstacles but only shows flocking behavior is acceptable.
See also:
C
Java
Racket
Here is the result. The Whalesong compiler was used to compile the Racket source into JavaScript.