Outils pour utilisateurs

Outils du site


nsi:tds:animation:vol_nuee_oiseaux

Vol d'une nuée d'oiseaux

On souhaite simuler le vol d'une nuée d'oiseaux et en particulier leur vol qui tend à devenir parallèle.

Modèle retenu

  • Tous les oiseaux ont la même vitesse V ;
  • chaque oiseau a une position x, y et une orientation angle ;
  • l'oiseau se déplace en ligne droite et quand un oiseau atteint un bord de l'écran, il réapparaît sur le bord opposé ;
  • à chaque instant, un oiseau ne considère que les oiseaux à une distance inférieure à Rmax, ce sont ses voisins ;
  • un oiseau essaie de s'aligner avec ses voisins, il calcul dont la moyenne de l'écart entre son angle et celui de ses voisins, puis il essaie de s'aligner sur cette moyenne.

Attention, le dernier point nécessite des précautions. Considérons un oiseau b. Il parcourt tous ses voisins. Prenons un voisin v. On calcule donc l'écart v.angle - b.angle. Cet angle doit s'exprimer entre -180° et +180° (ou entre $-\pi$ et $\pi$ si vous êtes en radians)

Une fois la moyenne des écarts moy_ecart obtenue, on souhaite que b.angle augmente de moy_ecart , mais pas d'un coup. Une bonne façon de le faire est de se fixer un coefficient s et de faire le calcul b.angle += s*moy_ecart.

Pour s on choisit une valeur entre 0 et 1. Plus c'est proche de 1 plus c'est rapide. Il s'agit d'ajuster pour trouver une valeur qui produit un bon effet.

Des choix

J'ai choisi Rmax = 30, V = 2, s = 0.3.

On doit bien sûr représenter plusieurs oiseaux. Dans l'exemple en image, j'en ai mis N = 200. Avec un langage rapide comme Processing, on peut sans problème en mettre 1000, ce qui fait très bel effet.

On place ces oiseaux aléatoirement sur la fenêtre et avec une orientation initiale aléatoire aussi.

J'ai dessiner chaque oiseau avec un cercle de 5 pixels de diamètre et un trait pour donner son orientation.

À vous

Solution possible avec Processing.

nsi/tds/animation/vol_nuee_oiseaux.txt · Dernière modification : de goupillwiki