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;
}
Hors ligne