Essaim Boids

Explorer séparation, alignement et cohésion dans un essaim tridimensionnel reproductible.

À propos de cet outil

C’est un modèle de guidage discret, tridimensionnel, inspiré des comportements de séparation, d’alignement et de cohésion de Reynolds. Les coordonnées sont des unités de longueur de modèle arbitraires, pas une simulation animale ou fluide calibrée. Il n’y a ni obstacles, ni cibles, ni collisions, ni lois de force physiques.

Un tic. Tous les boids lisent le même ancien état. Les voisins se situent dans le rayon choisi, y compris sa frontière. Le cube s’enroule sur chaque axe avec une période 8,4 ; les positions sont dans [−4,2, 4,2). Les distances de voisinage et la cohésion utilisent le plus court déplacement périodique δ. Un boid juste de l’autre côté d’une face d’enroulement peut donc être un voisin proche.

La séparation S est la somme de −δ/|δ| sur les voisins avec 0 < |δ| < 0,35 × rayon. Elle n’est pas moyennée, donc un voisinage dense peut exercer plus de guidage. L’alignement A est la vitesse moyenne des voisins moins la propre vitesse du boid. La cohésion C est le déplacement périodique moyen vers les voisins. Sans voisins, les trois sont nuls. Des boids coïncidents contribuent zéro à la séparation mais comptent encore pour l’alignement et la cohésion ; aucun coup de pouce aléatoire n’est ajouté.

La mise à jour est v′ = cap(v + séparation × S + alignement × A + cohésion × C), suivie de x′ = wrap(x + 0.04 × v′). Le plafond limite la vitesse au maximum choisi. Les coefficients s’appliquent une fois par tic de 40 ms ; ce ne sont pas des constantes de force en temps continu. Le tableau montre les composantes non pondérées pour le tic suivant. La vitesse moyenne est la moyenne arithmétique des vitesses individuelles.

Reproductibilité et commandes. Une graine 32 bits initialise un LCG avec s = (1664525 × s + 1013904223) mod 2³² et u = s / 2³². Six tirages par boid fixent x/y/z à (u−0.5) × 4.2 × 1.6 et vx/vy/vz à (u−0.5) × 2 ; la vitesse initiale est aussi plafonnée. La graine 0 est valide. Ce générateur sert à des exemples répétables, pas à la cryptographie.

Initialiser prépare le temps zéro et met en pause. Lancer reprend l’état courant ; Pause écarte le temps de tic partiel. Un pas met d’abord en pause et avance exactement 0,04 s. Réinitialiser retire l’essaim mais conserve les entrées. Toute édition de paramètre invalide l’ancien résultat. Les pages masquées se mettent automatiquement en pause. L’ordonnanceur en temps réel accepte au plus 250 ms par image, écartant les délais plus longs plutôt que de faire un grand saut de rattrapage. L’essaim courant et la sélection restent en pause pendant la navigation dans cette session. Un rechargement complet restaure localement les valeurs saisies dans ce navigateur, même vides ou incomplètes ; corrigez les champs invalides avant de réinitialiser. La simulation elle-même n’est pas conservée après rechargement. Les anciennes configurations partagées restent compatibles.

Vues. Les cônes 3D pointent le long de la vitesse ; un boid stationnaire est un point. Faites glisser pour orbiter et maintenez Ctrl ou ⌘ tout en utilisant la molette pour zoomer ; une molette ordinaire fait défiler la page. Sans WebGL, le même état 3D est montré en projection SVG isométrique fixe. Les deux vues marquent le boid choisi d’un anneau. La longueur du symbole n’indique pas la vitesse ; une vitesse perpendiculaire au plan de projection apparaît comme un point. Un recouvrement de projection n’implique pas que les boids occupent la même position 3D.

Source conceptuelle : Craig Reynolds: Boids. Les poids exacts, le rayon, la frontière périodique et la règle à tic fixe ci-dessus sont la variante spécifiée de cet outil, pas une formule Boids unique prescrite.