Outils pour utilisateurs

Outils du site


nsi:langages:processing:solutions:vol_nuee_oiseaux

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

nsi:langages:processing:solutions:vol_nuee_oiseaux [2022/11/02 11:15] – créée goupillwikinsi:langages:processing:solutions:vol_nuee_oiseaux [2022/11/02 11:22] (Version actuelle) goupillwiki
Ligne 3: Ligne 3:
 Solution du TD [[nsi:tds:animation:vol_nuee_oiseaux|Vol d'une nuée d'oiseaux]]. Solution du TD [[nsi:tds:animation:vol_nuee_oiseaux|Vol d'une nuée d'oiseaux]].
  
 +<WRAP tip>''radians'' permet de convertir un angle en degré vers un angle en radians. Dans Processing, les fonctions trigonométriques sont en radians, mais il est souvent plus facile de raisonner en degrés. La fonction ''radians'' permet de faire simplement la conversion.</WRAP>
  
 <code java> <code java>
-final int N = 200; +final int N = 200; // nombre total d'oiseaux 
-final int V = 2; +final int V = 2;   // vitesse de chaque oiseau 
-final int Rmax = 30; +final int Rmax = 30; // rayon pour le voisinage 
-final float s = 0.3; +final float s = 0.3; // coefficient pour adoucir l'alignement 
-Bird[] birds = new Bird[N];+Bird[] birds = new Bird[N]; // ensemble des oiseaux
  
 void setup() { void setup() {
Ligne 32: Ligne 33:
  
 class Bird { class Bird {
 +  /* classe décrivant un oiseau */
   float x, y, angle;   float x, y, angle;
   Bird() {   Bird() {
 +    /* un oiseau est initialisé aléatoirement sur la fenêtre */
     x = random(width);     x = random(width);
     y = random(width);     y = random(width);
Ligne 40: Ligne 43:
      
   void display() {   void display() {
-    /un cercle et un trait+    /* l'oiseau est un simple cercle avec un trait 
 +       pour donner l'orientation 
 +    */
     circle(x, y, 5);     circle(x, y, 5);
     float dx = 10*cos(radians(angle));     float dx = 10*cos(radians(angle));
Ligne 48: Ligne 53:
      
   void update() {   void update() {
 +    /* met à jour la position de l'oiseau
 +       tenant compte de sa vitesse
 +       si l'oiseau dépasse d'un bord,
 +       il réapparaît à l'opposé
 +    */
     float vx = V*cos(radians(angle));     float vx = V*cos(radians(angle));
     float vy = V*sin(radians(angle));     float vy = V*sin(radians(angle));
Ligne 65: Ligne 75:
      
   float d2(Bird b){   float d2(Bird b){
-    /renvoie la distance au carré entre self et b+    /renvoie la distance**2 de self 
 +       avec l'oiseau b 
 +    */
     return (x - b.x)*(x - b.x) + (y - b.y)*(y-b.y);     return (x - b.x)*(x - b.x) + (y - b.y)*(y-b.y);
   }   }
      
   float ecartAngle(Bird b) {   float ecartAngle(Bird b) {
-    // renvoie l'angle entre -180 et 180 degrés+    /* mesure l'écart d'angle sentre self et l'oiseau b 
 +       renvoie le résultat entre -180 et 180 degrés 
 +    */
     float ecart = b.angle - angle;     float ecart = b.angle - angle;
     if (ecart > 180) {     if (ecart > 180) {
Ligne 83: Ligne 97:
      
   void align(Bird[] birds){   void align(Bird[] birds){
-    /* parmi les position à moins de Rmax+    /* parmi l'ensemble des oiseaux birds
-       prend l'écart d'angle par rapport à self +       cherche les oiseaux qui sont dans le voisinage 
-       et fait la moyenne +       pour chacun d'eux cumule l'écart d'angle afin 
-       puis ajuste self.angle pour le ramener vers la moyenne+       de calculer la moyenne, 
 +       puis modifie self.angle pour aligner self avec ses voisins
     */     */
     float a = 0;     float a = 0;
nsi/langages/processing/solutions/vol_nuee_oiseaux.1667384157.txt.gz · Dernière modification : de goupillwiki