Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.


c’est quoi les boids ?

une simulation ludique où on tente de reproduire le comportement d’animaux en groupes
typiquement nuée d’oiseaux ou banc de poissons

intérêts

c’est intéressant parce que


introduction

dans ce TP nous allons


notre sujet

dans sa version originale chaque animal décide de sa trajectoire, en fonction uniquement de ses voisins proches, et cela en suivant trois règles:

pour la partie imposée de ce TP, on va se contenter d’implémenter la règle de séparation
c’est-à-dire ce qui permet aux boids d’éviter de heurter les autres boids, et les obstacles

les élèves rapides et/ou motivés pourront poursuivre jusqu’à réaliser une simulation complète s’ils le souhaitent


en vidéo

voici d’abord une vidéo très courte pour vous montrer les différentes étapes du TP

penser à la lire en plein écran

l’enjeu principal ici est d’être exposé à la programmation par spécialisation de classes
aussi ce chemin par étapes est uniquement indicatif, et surtout à destination des élèves qui ressentent le besoin d’être guidés pas à pas
si vous vous sentez, vous pouvez très bien vous y prendre complètement autrement !
le contrat est rempli dès que vous avez: des obstacles fixes, et des boids qui évoluent spontanément en évitant les obstacles et les autres boids


contenu du zip

le zip contient


pas à pas

v02: starter code

vous devez voir un seul boid immobile, dans le coin en bas à gauche


v03: le boid avance

maintenant on va faire bouger notre objet, et lui donner un mouvement rectiligne

et pour ça on va cesser d’utiliser directement la classe Sprite,
et on va au contraire la spécialiser pour créer notre propre classe Boid
(c-à-d que la classe Boid hérite de la classe Sprite)


v04: en circuit fermé


v05: du bruit sur le cap

faites en sorte que le trajet du boid ne soit plus strictement rectiligne
en ajoutant à chaque pas un léger bruit sur la direction


v06: les touches et

faites en sorte de pouvoir contrôler la direction du boid avec les touches du clavier


v07: ajouter un obstacle

ajoutez un unique obstacle, immobile, par exemple au centre du jeu
vous trouverez une image media/obstacle-resized.png pour le matérialiser


v08: créez une grille d’obstacles

remplacez l’unique obstacle par une grille d’obstacles
par exemple: mettez en 10 x 10, ils sont donc espacés de 80px


v09: détecter les voisins

faites en sorte d’animer le boid, pour montrer quand il est proche d’un obstacle ou pas
prenez 20 pixels comme rayon de détection
pour ma part j’ai rendu le boid semi-transparent, en jouant sur l’attribut alpha des Sprite
(255 = opaque, 0 = transparent)


v10: la règle de séparation

implémentez la règle de séparation
on peut la résumer comme ceci:


c’est-à-dire que quand on s’intéresse au boid b, on va

je n’ai pas trouvé de formule dans la littérature pour calculer δ\overrightarrow{\delta}, j’ai sorti de mon chapeau la formule suivante

δ=ob×12(1dr)\overrightarrow{\delta} = \overrightarrow{ob} \times \frac{1}{2}(1-\frac{d}{r})

de façon à ce que:

on fait la somme de tous ces vecteurs, et on l’ajoute au déplacement de b
i.e., dans l’exemple de la figure, lorsqu’on traite le boid en b:


v11: orienter correctement

l’effet n’est pas forcément très réussi, vous devez voir l’orientation sauter brutalement d’un angle à un autre


v12: tourner plus doucement

pour lisser les changements d’orientation: comment pourrait-on obtenir quelque chose d’un peu plus élégant, en ce qui concerne les changements de direction ?


v13: les touches et

faire en sorte qu’on puisse contrôler aussi la vitesse avec les touches et
essayez le comportement de l’évitement d’obstacles à plusieurs vitesses


v14: plusieurs boids

remplacez l’unique boid par un ensemble de 20 boids
sans changer, pour l’instant, la séparation, qui est calculée seulement à partir des obstacles


v15: éviter aussi les autres boids

assurez-vous que la séparation permet d’éviter tous les objets (obstacles et boids)


en option...

vous pouvez ensuite améliorer dans les directions suivantes :


pour aller plus loin