Flocking
Boids: el comportamiento que muestran aves y peces cuando van en grupo. Alinean su dirección de movimiento con la de sus compañeros, se mantienen cerca de ellos y evitan colisionar. Tres reglas mínimas — alineamiento, cohesión, separación — y la bandada sale sola, sin que nadie la dirija.
Cada célula se mueve por el canvas, se orienta según esas tres reglas sumadas en una única fuerza, choca con sus vecinas como un cuerpo sólido, y se envuelve por los bordes del mundo: sales por la derecha y vuelves a entrar por la izquierda.
Está escrito con tests primero. Las especificaciones en user-stories/ son
literalmente la especificación — "as a user I want to watch them follow flocking
behaviour" es un fichero, escrito antes del código que lo cumple — y se ejecutan
en cada push.
Esto empezó como la segunda versión de Lulas, reescrita desde cero para simplificar la implementación del flocado. Mantuvo ese nombre durante años, hasta que se renombró a lo que realmente es.
Estuvo en pausa un tiempo buscando una buena implementación de Quadtree: la búsqueda de vecinos es O(n²), lo cual está bien con cincuenta células y deja de estarlo bastante antes de que la cosa se ponga interesante.