cs_mat74
Messages postés241Date d'inscriptiondimanche 10 août 2003StatutMembreDernière intervention16 juin 2010
-
21 sept. 2004 à 23:12
cs_mat74
Messages postés241Date d'inscriptiondimanche 10 août 2003StatutMembreDernière intervention16 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
@+
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 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)
cs_mat74
Messages postés241Date d'inscriptiondimanche 10 août 2003StatutMembreDernière intervention16 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 )
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 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));
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_mat74
Messages postés241Date d'inscriptiondimanche 10 août 2003StatutMembreDernière intervention16 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 ?
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 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.