float vitesse = 90.0; float ecart = 1.0; float x1, y1, vitx, vity; float sinvalxy2, cosvalxy2, angle_xy2, rayon_xy2, x2, y2; float sinvalxy3, cosvalxy3, angle_xy3, rayon_xy3, x3, y3; float sinvalxy4, cosvalxy4, angle_xy4, rayon_xy4, x4, y4; float sinvalxy5, cosvalxy5, angle_xy5, rayon_xy5, x5, y5; float sinvalxy6, cosvalxy6, angle_xy6, rayon_xy6, x6, y6; int rayon_poil2, rayon_poil3, rayon_poil4; float angle, sinval, cosval, x, y; void setup(){ size(600, 500); x1 = width/2; y1 = 150; rayon_xy2 = 100; rayon_xy3 = 80; rayon_xy4 = 60; rayon_xy5 = 40; rayon_xy6 = 20; rayon_poil2 = 60; rayon_poil3 = 40; rayon_poil4 = 20; background(0); smooth(); } void draw(){ x1 += vitx; y1 += vity; if (y1 > 300){ vity = -1; } else if (y1 < 50){ vity = 1.9; } else if (x1 < 200){ vitx = 1.0; } else if (x1 > 400){ vitx = -1.0; } else if (x2 > x1){ vitx = -1.0; } else if (x1 > x2){ vitx = 1.0; } if (y6 > y2){ vity = -1; } else if (y2 > y6){ vity = 1.9; } vitesse += ecart; if (vitesse > 180 || vitesse < 0){ ecart = - ecart; } // fond noir noStroke(); fill(0, 100); rect(0, 0, width, height); // épaisseur des contours strokeWeight(2); // 1ère articulation stroke(255, 153); fill(255, 100); ellipse(x1, y1, 10, 10); // 1er cercle de poils for (int i = 0; i < 15; i++){ stroke(255, 100); angle_xy2 = (i * HALF_PI/15.0) + vitesse/60 - QUARTER_PI; sinvalxy2 = sin (angle_xy2); cosvalxy2 = cos (angle_xy2); x = x1 + (cosvalxy2 * rayon_poil2); y = y1 + (sinvalxy2 * rayon_poil2); line (x1, y1, x, y); } // 2ème articulation angle_xy2 = QUARTER_PI + (vitesse * HALF_PI/180.0); sinvalxy2 = sin (angle_xy2); cosvalxy2 = cos (angle_xy2); x2 = x1 + (cosvalxy2 * rayon_xy2); y2 = y1 + (sinvalxy2 * rayon_xy2); stroke(255, 151); line(x1, y1, x2, y2); stroke(255, 153); fill(255, 100); ellipse(x2, y2, 8, 8); // 2eme cercle de poils for (int i = 0; i < 10; i++){ stroke(255, 100); angle_xy3 = (i * HALF_PI/10.0) + vitesse/45 - (3 * QUARTER_PI/2); sinvalxy3 = sin (angle_xy3); cosvalxy3 = cos (angle_xy3); x = x2 + (cosvalxy3 * rayon_poil3); y = y2 + (sinvalxy3 * rayon_poil3); line (x2, y2, x, y); } // 3ème articulation angle_xy3 = vitesse * HALF_PI/90.0; sinvalxy3 = sin (angle_xy3); cosvalxy3 = cos (angle_xy3); x3 = x2 + (cosvalxy3 * rayon_xy3); y3 = y2 + (sinvalxy3 * rayon_xy3); stroke(255, 151); line(x2, y2, x3, y3); stroke(255, 153); fill(255, 100); ellipse(x3, y3, 6, 6); // 3eme cercle de poils for (int i = 0; i < 6; i++){ stroke(255, 100); angle_xy4 = (i * HALF_PI/6.0) + vitesse/45 - (3 * QUARTER_PI/2); sinvalxy4 = sin (angle_xy4); cosvalxy4 = cos (angle_xy4); x = x3 + (cosvalxy4 * rayon_poil4); y = y3 + (sinvalxy4 * rayon_poil4); line (x3, y3, x, y); } // 4ème articulation angle_xy4 = (vitesse * HALF_PI/60.0) - QUARTER_PI; sinvalxy4 = sin (angle_xy4); cosvalxy4 = cos (angle_xy4); x4 = x3 + (cosvalxy4 * rayon_xy4); y4 = y3 + (sinvalxy4 * rayon_xy4); stroke(255, 151); line(x3, y3, x4, y4); stroke(255, 153); fill(255, 100); ellipse(x4, y4, 5, 5); // 5ème articulation angle_xy5 = (vitesse * HALF_PI/45.0) - HALF_PI; sinvalxy5 = sin (angle_xy5); cosvalxy5 = cos (angle_xy5); x5 = x4 + (cosvalxy5 * rayon_xy5); y5 = y4 + (sinvalxy5 * rayon_xy5); line(x4, y4, x5, y5); stroke(255, 153); fill(255, 100); ellipse(x5, y5, 4, 4); // 6ème articulation angle_xy6 = (vitesse * HALF_PI/30.0) - PI; sinvalxy6 = sin (angle_xy6); cosvalxy6 = cos (angle_xy6); x6 = x5 + (cosvalxy6 * rayon_xy6); y6 = y5 + (sinvalxy6 * rayon_xy6); stroke(255, 151); line(x5, y5, x6, y6); stroke(255, 153); fill(255, 100); ellipse(x6, y6, 3, 3); }