Hace tiempo me interesé por los algoritmos de flocking o movimientos de manada. Esto pude sonar a chino, pero simplemente se trata de tratar emular los movimientos en conjunto de los pajaros, bancos de peces, ovejas…, vamos, cualquier conjunto de animales en movimiento.
Las reglas de movimiento, a pesar de que puedan parecer complejas a simple vista, estan basadas sólo en tres simples leyes:
- Repulsión: Intentar no chocar con los compañeros.
- Alineamiento: Avanzar en una dirección semejante a la de tus compañeros.
- Cohesión: Acercarse hacia el centro del grupo.
De la media de estos valores se extrae el vector director de cada individuo.
VectorDirector = (Repulsión + Alineamiento + Cohesión)/3
Pues con esta idea intenté ayer programar una pequeña demo para implementarlo.
Aquí os pongo un video de como esta quedando. Aún quedan por retocar varias cosas ya que algunas reglas no las estoy aplicando estrictamente. La parte más importante que no esta implementada es el calculo de las posiciones de los vecinos. De momento los calculos de las dos primeras reglas las realizo sobre el número global de individuos, derivando en algunos movimientos extraños de cohesión.
En la demo juego con los efectos de atracción y repulsión de la manada sobre un punto movil.
Espero que os guste.
Comments