SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013
-
17 juin 2006 à 18:29
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013
-
18 juin 2006 à 15:35
Bonjour
Je suis toujours a essayer de rendre mon jeu realiste (meme principe
que le billard) et j'ai essayé pas mal de methodes sans jamais trouver
la bonne.
La j utilise la fonction suivante (non optimisé mais je suis en train de la bricoler)
Qui marche nickel pour les angles des rebonds mais absolument pas pour
les forces. Si une boule en mouvement rentre dans une boule fixe, la
premiere s arrette et c'est la seconde qui repart. Donc j'ai trouvé la
formule suivante
V1'=((M-1)V1)/(M+1)
V2'=(2*M*V2)/(M+1)
avec M=m1/m2
Mais celle ci ne marche que pour les collisions directes, les vecteurs
sont alignés et les centres des boules aussi. Si les boules se cognent
a peine (sur un bord) cette fonction est fausse.
Quelqu'un aurait une piste pour orienter mes recherches ??
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 18 juin 2006 à 12:54
//***********************************************
P_BALL B1,B2;
VECT2D u,v; // base locale, u dirige selon les centres des deux boules et v l'orthogonal
double u1,u2,uG,v1,v2;
uG = (B1->m*u1 + B2->m*u2)/(B1->m + B2->m);
u1 = 2*uG - u1;
u2 = 2*uG - u2;
LinCombinVect2D(&B1->v,&u,&v,u1,v1);
LinCombinVect2D(&B2->v,&u,&v,u2,v2);
//***********************************************
en fait tu n'as besoin que de la composante X du vecteur vitesse vG (l'axe des X etant la droite passant par les deux centres)
regarde la ligne "uG = ..."
Pourquoi faire simple quand on peut faire compliqué ?
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 17 juin 2006 à 19:06
Si tu veux simuler les chocs elastiques, alors c'est "normal" que si une boule initialement au repos se prend une boule a pleine vitesse, alors elle va prendre cette vitesse, et l'autre boule va s'arreter ! c'est tout a fait physique (c'est le celebre jeu des tic tac ou il y a 5 billes supendues a des files, puis en ecartant une on s'apercoit que lorqu'elle retombe, seule la bille oppose remonte ...)
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013 17 juin 2006 à 20:04
Ben en fait si le choc est direct 100/100 de l(energie est transférée
donc la premiere s'arrette et la seconde part a la vitesse de la
premiere c'est l'exemple du tictac.
Dans l'autre cas la droite passant par le centre des deux boules n'est
pas dans le meme sens que les 2 forces et donc seule une partie est
transferée.
Si une boule de billard touche une autre boule sur un coté les deux
rebondissent et la ou je m'apercoit que les formules sont fausses (ou
plutot valable dans un cas trop precis)
en fait j 'envoi a ma fonction les information sur le 1 er vecteurs (dx
et dy), la fonction me normalise le vecteur passant par le centre des
deux boules et me retourne le nouveau vecteur V1.
pour le second vecteur mais ca ne marche que pour un choc entre un
objet mobile et un autre immobile sachant que apres le premier rebondi
et la seconde boule ne bouge pas (comme globule[i].dx et globule[i].dy
sont nuls).
Vous n’avez pas trouvé la réponse que vous recherchez ?
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013 17 juin 2006 à 21:41
Ben en fait mes "boules" sont stochées dans des tableaux Globules
Globule[2] = 2 eme globule
dxtang = globule[glob].x - globule[i].x;
dytang = globule[glob].y - globule[i].y;
En fait dxtang corespond a la distance suivant x entre le centre de la
boule Globule[i] et globule[glob] (sachant que globule[glob] correspond
au globule que le prog est en train de gerer). En fait il fait les
calculs pour chaque globule (glob prends toute les valeur de 1 a 6)
avec tout les globules (i passe de 0 a 6 globule) avec une magouille
pour eviter qu'il calcule 2 fois le meme (une fois quand il touche et
quand il est touché).
En fait pour mes rebonds je bosse avec
le Vecteur Vitesse (et direction vu que c'est un vecteur) de la boule traité globule[glob].dx et globule[glob].dy
Le point de la boule traité globule[glob].x et globule[glob].y
les Vecteurs Vitesses des autres boules globule[i].dx et globule[i].dy
Les point des boules traitées globule[i].x et globule[i].y
Pour i allant de 0 a 6.
Tout est en temps reel par contre contrairement au billard.
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013 18 juin 2006 à 11:48
J'ai regardé ton code et je crois que mon erreur viens bien du calcul du centre de gravité
vA(apres) = 2.vG - vA(avant)
vB(apres) = 2.vG - vB(avant)
Moi pour vG je prend le vecteur normalisé passant par le centre des 2
boules et donc quelque soit le vecteur de la boule 1 les calculs pour
la boule 2 se font juste avec V2 et ce vecteur.
Mais j'arrive pas a comprendre ou tu calcules vG (le code est assez complexe)
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013 18 juin 2006 à 15:35
Merci beaucoup ca marche nickel.
Ca fait 2 semaine que je galere sur google a chercher les formules,
j'avais deja vu ta source mais franchement le code est assez lourd et
j'avais laissé tomber. En fait j'ai juste recupéré les fonctions utiles
et remplacé les P_BALL pour pouvoir m'y retrouver et ca a marché du
premier coup, j'aurais du faire plus gaffe.
Maintenant j 'aurais plus de respect quand dans un jeu je voit un gars
qui s' est cassé le cul a faire un rendu physique qu'on remarque a
peine.