Moteur physique : détecter les collisions

noncommunique Messages postés 2 Date d'inscription dimanche 28 janvier 2007 Statut Membre Dernière intervention 29 janvier 2007 - 28 janv. 2007 à 18:54
Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 - 1 févr. 2007 à 16:02
Bonjour !!

Je suis en train de tenter de réaliser un moteur physique et j'ai le problème suivant : je ne sais pas comment faire pour détecter une éventuelle collision entre une boule dont le centre a pour coordonnée x y z et est de rayon r, et un pavé dont on connait les coordonnées des 8 sommets, et comment la traiter

Merci !

4 réponses

MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
29 janv. 2007 à 02:51
Salut, en quelle classe es-tu ?
En terminale S on voit un moyen simple de calculer la distance d'un point à un plan.
A partir de là tout est simple, si la distance entre le centre et le plan <=r, alors il y a collision.
Tout bête non ? si tu trouves pas la formule, je ferai peut etre l'éffort d'aller ouvrir un livre.
Bonne chance pour ton moteur physique.
@+

/* MuPuF®
0
noncommunique Messages postés 2 Date d'inscription dimanche 28 janvier 2007 Statut Membre Dernière intervention 29 janvier 2007
29 janv. 2007 à 18:51
Merci, je suis en SUP :)

Le problème est que, si l'on a un pavé, prenons sa face supérieure. Cette face est un parallélogramme. Calculer la distance de la sphère au plan contenant cette face n'est pas correcte car la boule peut très bien ne pas rentrer dans le parallélogramme mais couper le plan

J'avais déjà pensé a faire la chose suivante : projeter le centre de la boule sur le plan contenant le parallélogramme, puis à l'aide de barycentres, déterminer si ce centre était dans le parallélogramme. Si tel était le cas, alors on vérifiait que la distance entre le centre de la boule est le plan était inférieure à r : dans ce cas là on avait collision. Le problème à cela est le cas suivant : imaginons un pavé droit dont les sommets ont pour coordonnées (0,0,0)(0,0,1)(0,1,0)(0,1,1)(1,0,0)(1,0,1)(0,1,0)(1,1,1), prenons r=1 et la trajectoire selon une droite z=11/10 et x=1/2. (faites une figure pour bien visualier :))
Il y aura un moment où la boule touchera le pavé, mais ma méthode ne fonctionne pas

Auriez vous d'autres idées, ou connaitriez vous des tutoriaux clairs et bien faits

Merci :)
0
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
30 janv. 2007 à 04:00
(d'où l'interêt de renseigner plus correctement ton profil cppfrancien), moi j'ai tjs feinté, donc je peux pas trop t'aider, je suis plutot une quiche en math car justement les profs aiment pas qu'on démontre pas (comme c'est étonnant, mais dur de démontrer les évidences).
Fait gaffe par contre pour la projection, car si la projection du centre de la sphere n'est pas dans le parrallélogramme, ça veut pas dire qu'elle ne touche pas, ( ex : on garde les mêmes coordonées pour le pavé droit, on place la boule à X=0,Y=0 et Z=-0.5, la boule va toucher et donc gros problème).
Essaye de trouver une méthode continue, sans gestion de cas, c'est le best du best et ce sera surrement bien plus rapide (et oui en prog, la gestion des cas c'est pas aussi bien qu'en math, ça coute ;-)
Bonne chance, et désolé, je me pencherai peut etre sur ton exemple demain en cours, car là j'ai vraiment plus la volonté (4h du mat, et cours demain, faut que j'y aille).

/* MuPuF®
0
Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
1 févr. 2007 à 16:02
Les faces d'un pavé sont des rectangles.
Si ABCD est une de ses faces avec n=AB^BC/(|AB|.|BC|) orienté vers l'extérieur, ta boule de centre I et de rayon r penètre le plan de la face si AI.n<r.

Ensuite, c'est facile, si la boule penetre tous les plans des faces, alors tu as collision.
La normale au contact peut être assimilé à la normale à la face du pavé qui minimise |AI.n-r|
0
Rejoignez-nous