Collision 2d

cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010 - 21 sept. 2004 à 23:12
cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010 - 23 sept. 2004 à 12:50
voila j'ai un pb avec les collisions en 2d ,
j'aimerai savoir si qq1 connai une maniere de gérer les collisions entre un rond et des droites et de maniere relativement precise .
les droites sont definie par 2 points, pr le disque j'ai les coordonnées du centre et le rayon .
merci d'avance
@+

9 réponses

leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
21 sept. 2004 à 23:22
bon je dis ca un peu au feeling paske il est tard pr reflechir clairement(et jai jamsi reelement fait)
a priori, si tu as deux points de ta droite, tu dois pouvoir trouver son equation, a partir de lequation, trouve la normale a la droite passant par le centre du cercle, si la distance entre le pt dintersection de la normale et de la droite et le centre du cercle est inferieur au rayon, tu as collision. je pense ke meme si cest faux je dois pas etre loin de la réalité. en esperant ke ca taide (et ke jai pas dit une grosse connerie)
0
cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010
21 sept. 2004 à 23:39
scuz moi je me suis planter c'est pas des droites mais des segments et pr ton idée tu pourrais detaillé un peu car je serai pas faire ( par ex : comment tu fais pr trouver la normal )
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
22 sept. 2004 à 00:17
droite : ptStart, ptEnd.
point : pt.

// vecteur directeur de la droite
int dx = ptEnd.x-ptStart.x;
int dy = ptEnd.y-ptStart.y;

// système d'équation pour le calcul des coordonnées de la projection orthogonale du point sur la droite
int s1 = -ptStart.y*dx+ptStart.x*dy;
int s2 = pt.x*dx+pt.y*dy;
int delta = dx*dx+dy*dy;
if(delta == 0)
return 0;

// coordonnées de la projection, puis calcul de la distance (au carré)
double x = ((double)(dy*s1+dx*s2))/delta;
double y = ((double)(-dx*s1+dy*s2))/delta;
double dist = ((x-pt.x)*(x-pt.x)+(y-pt.y)*(y-pt.y));

code récupéré sur un projet, à re-tester.
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
22 sept. 2004 à 08:17
au pire voila l'algo (a combiner avec ce code):
si point d'une des deux extremités ds le cercle -> collision
(c'est a dire si la distance du point au centre est inferieure ou egale au rayon)
sinon, trouver la normale a la droite generée par les 2 extremites de ton segment et passant par le centre du cercle.
si cette droite nappartient pas a ton segment, pas collision
sinon si cette droite appartient au segment et que le distance entre le segment et le centre du cercle est inferieure ou egale au rayon -> collision
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010
22 sept. 2004 à 12:28
ymca2003 : je ne comprend pas comment tu peux calculer la projection du pt sur la droite alors que tu ne tient pas compte de la direction de la balle ?
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
22 sept. 2004 à 20:14
La balle ?

le code que j'ai mis sert simplement à calculer la distance entre un point et une droite, aucune notion de direction la dedans.
0
cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010
22 sept. 2004 à 23:06
ouai mais alors comment tu choisix le point de la droite a tester pr la distance avec point ?
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
23 sept. 2004 à 08:29
bah faut tester la distance entre le point d'intersection de la droite et sa normale et le point en question, car ce sera la distance la plus courte entre le droite et le point.
0
cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010
23 sept. 2004 à 12:50
en okay j'ai pigé , en fait je ne conprenais pas bien a koa servait la normal
0
Rejoignez-nous