//definition des variables pour la position du centre du cercle float cercle_x; float cercle_y; float cercle_r = 100; //definition des varaibles pour la position du point float point_x = 200; float point_y = 200; //definition des variables pour le dŽplacement du point float angle; float rayon = 5; void setup() { size (400,400); angle = (int)random(360); cercle_x = height/2; cercle_y = width/2; cercle_r = cercle_x * .75; noStroke(); smooth(); } void draw() { // blanc background(255); //le cercke dans lequel le point ne peux pas sortir fill(0); ellipse (cercle_x, cercle_y, cercle_r*2, cercle_r*2); //on dŽplace le point point_x += cos(radians(angle)) * PI * rayon; point_y += sin(radians(angle)) * PI * rayon; // la distance de notre point du centre float distance = dist(point_x, point_y, cercle_x, cercle_y); //verifions si le point est sur ou en dehors du cercle if( distance >= (cercle_r-5) ) { // l'angle du bord du cercle float angle_cercle = degrees(atan2( point_y-cercle_x , point_x-cercle_y)); // remettre le cercle sur le bord pour ne pas sortir du rayon // sans cette fonction la balle peut sortir de temps en temps // ce caclul est totalement artificiel (ou en tout cas pas trs mathŽmatique) // et en plus *0.308 a ŽtŽ calculŽ par tatonnement en essayant plusieurs valeurs point_x = cercle_x + cos(radians(angle_cercle)) * PI * (cercle_r*0.308); point_y = cercle_y + sin(radians(angle_cercle)) * PI * (cercle_r*0.308); // calculer le rebond suivant la formule suivant: // nouvelle_angle = (2 * l'angle du bord) - angle_actuel angle = ((angle_cercle * 2) - angle) + 180; // rester ˆ l'intŽrieur de 0-360 angle %= 360; } // ralentir un peu rayon *= 0.99; //fin du dŽplacement //on dessine le point fill(255); ellipse (point_x,point_y,10,10); } // quand on clic void mousePressed() { // si nous ne sommes pas assez proche de la balle, ignorer le reste if (dist(mouseX, mouseY, point_x, point_y) > 10) return; // trouver l'angle du clic angle = (degrees(atan2( mouseY-point_y , mouseX-point_x)) + 180) % 360; // ajouter de la vitesse rayon += 2; rayon = min(5, rayon); }