Bandada Boids

Explora separación, alineación y cohesión en una bandada tridimensional reproducible.

Acerca de esta herramienta

Es un modelo de dirección discreto tridimensional inspirado en los comportamientos de separación, alineación y cohesión de Reynolds. Las coordenadas son unidades de longitud de modelo arbitrarias, no una simulación calibrada de animal o fluido. No hay obstáculos, objetivos, colisiones ni leyes de fuerza físicas.

Un paso. Todos los boids leen el mismo estado anterior. Los vecinos están dentro del radio elegido, incluido su borde. El cubo se envuelve en cada eje con periodo 8,4; las posiciones están en [−4,2, 4,2). Las distancias de vecino y la cohesión usan el desplazamiento periódico más corto δ. Un boid justo al otro lado de una cara de envoltorio puede por tanto ser un vecino cercano.

La separación S es la suma de −δ/|δ| sobre vecinos con 0 < |δ| < 0,35 × radio. No se promedia, así que un vecindario denso puede ejercer más dirección. La alineación A es la velocidad media de los vecinos menos la velocidad propia del boid. La cohesión C es el desplazamiento periódico medio hacia los vecinos. Sin vecinos las tres son cero. Boids coincidentes aportan separación cero pero siguen contando para alineación y cohesión; no se añade un empujón aleatorio.

La actualización es v′ = cap(v + separation × S + alignment × A + cohesion × C), seguida de x′ = wrap(x + 0.04 × v′). El tope limita la velocidad al máximo elegido. Los coeficientes se aplican una vez por paso de 40 ms; no son constantes de fuerza en tiempo continuo. La tabla muestra los componentes sin ponderar del siguiente paso. La velocidad media es la media aritmética de las velocidades individuales.

Reproducibilidad y controles. Una semilla de 32 bits inicializa un LCG con s = (1664525 × s + 1013904223) mod 2³² y u = s / 2³². Seis sorteos por boid ponen x/y/z en (u−0.5) × 4.2 × 1.6 y vx/vy/vz en (u−0.5) × 2; la velocidad inicial también se recorta. La semilla 0 es válida. Este generador es para ejemplos repetibles, no criptografía.

Inicializar prepara el tiempo cero y pausa. Ejecutar reanuda el estado actual; Pausa descarta el tiempo parcial de paso. Un paso primero pausa y avanza exactamente 0,04 s. Restablecer elimina la bandada pero conserva las entradas. Cualquier edición de parámetro invalida el resultado anterior. Las páginas ocultas pausan automáticamente. El programador a tiempo real acepta como máximo 250 ms por fotograma, descartando retrasos más largos en lugar de dar un gran salto de recuperación. La bandada y la selección actuales permanecen en pausa durante la navegación en esta sesión. Una recarga completa restaura localmente los valores introducidos en este navegador, incluidos campos vacíos y números incompletos; corrige los valores no válidos antes de inicializar. La simulación no se conserva al recargar. Las configuraciones compartidas antiguas siguen siendo compatibles.

Vistas. Los conos 3D apuntan a lo largo de la velocidad; un boid estacionario es un punto. Arrastra para orbitar y mantén Ctrl o ⌘ mientras usas la rueda para zoom; una rueda ordinaria desplaza la página. Sin WebGL, el mismo estado 3D se muestra en una proyección SVG isométrica fija. Ambas vistas marcan el boid elegido con un anillo. La longitud del símbolo no indica velocidad; una velocidad perpendicular al plano de proyección aparece como un punto. El solapamiento de proyección no implica que los boids ocupen la misma posición 3D.

Fuente conceptual: Craig Reynolds: Boids. Los pesos exactos, el radio, el borde periódico y la regla de paso fijo anteriores son la variante especificada de esta herramienta, no una fórmula Boids prescrita de forma única.