En reprenant l'exercice de base des boules mobiles, je cherche à gérer les chocs entre les boules. Voici le code de la méthode deplace() de la classe maboule, où maboule[i] est le tableau d'instance des boules. Si cela marche pas trop mal, deux problèmes : - si une boule arrive par la droite d'une boule statique, elles se collent entre elles et ne bougent plus. (alors qu'un choc par la gauche marche bien !) - les vitesses après choc ne sont pas vraiment les bonnes (addition non vectorielle)
Auriez-vous un algo qui prenne en charge cette gestion de choc ??
Merci de votre aide.
int deplace(){ float d; // update la position positionx +=vitessex; positiony +=vitessey;
// verifier si on n'est pas proche d'une des autres boules int i=0, fin=0; while((i<nb_cercles)&&(fin==0)){ d=sqrt(sq(maboule[i].positionx-positionx)+sq(maboule[i].positiony-positiony)); if ( (d>3)&&(d<=2*rayon) ) { vitessey = -(2*vitessey+maboule[i].vitessey)/3; vitessex = -(2*vitessex+maboule[i].vitessex)/3; maboule[i].vitessex = -vitessex ; maboule[i].vitessey = -vitessey ; positionx = maboule[i].positionx - cos(atan((maboule[i].positiony-positiony)/(maboule[i].positionx-positionx))) * 2.1 * rayon; positiony = maboule[i].positiony - sin(atan((maboule[i].positiony-positiony)/(maboule[i].positionx-positionx))) * 2.1 * rayon; fin=1; } i++; }
// decelere; vitessex *= 0.99; vitessey *= 0.99; return fin; }
|