====== Vol nuée d'oiseaux ====== Solution du TD [[nsi:tds:animation:vol_nuee_oiseaux|Vol d'une nuée d'oiseaux]]. ''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. final int N = 200; // nombre total d'oiseaux final int V = 2; // vitesse de chaque oiseau final int Rmax = 30; // rayon pour le voisinage final float s = 0.3; // coefficient pour adoucir l'alignement Bird[] birds = new Bird[N]; // ensemble des oiseaux void setup() { size(800,600); fill(255); stroke(255); for (int i=0; i width) { x = x - width; } y += vy; if (y<0) { y = y + height; } else if (y > height) { y = y - height; } } float d2(Bird b){ /* renvoie la distance**2 de self avec l'oiseau b */ return (x - b.x)*(x - b.x) + (y - b.y)*(y-b.y); } float ecartAngle(Bird b) { /* 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; if (ecart > 180) { return ecart -360; } else if (ecart <= -180) { return ecart + 360; } else { return ecart; } } void align(Bird[] birds){ /* parmi l'ensemble des oiseaux birds, cherche les oiseaux qui sont dans le voisinage pour chacun d'eux cumule l'écart d'angle afin de calculer la moyenne, puis modifie self.angle pour aligner self avec ses voisins */ float a = 0; int n = 0; for (int i=0; i