Dans le cadre d'un projet informatique 3D, une question se pose à notre équipe: Comment faire pour savoir, SI, deux segments sont sécants et, la cerise sur le gâteau, quelles sont les coordonnées de ce point d'intersection( bah oui sinon c'est pas drôle). Le tout étant bien entendu de pouvoir le programmer ( en python ).
Et puisse qu'on en est aux questions, une petite dernière pour la route: Quelle serait la formule pour calculer l'angle du rebond d'un vecteur sur un plan ( en trois dimensions)?
Merci beaucoup de votre réponse en étant parfaitement conscient de la taille de la question que je pose.
Pour la question 'Comment savoir si 2 segments sont sécants', on parle de 2 segments qui sont dans un même plan? Ou bien il y a une première étape qui consiste à vérifier qu'ils sont coplanaires.
En d'autres mots, on est en dimension 2, ou en dimension 3 ? Peut on parler des segments (A, B) avec A(xa,ya) et B(xb,yb) et (C,D) avec C(xc,yc) et D(xd,yd) ?
En fait, tu peux déjà commencer par regarder si les droites portées par ces segments s'intersectent. En gros, en numérotant tes segments \( (A_1, B_1) \) et \( (A_2, B_2) \), ça revient à chercher un couple \(t_1, t_2\) tel que
C'est un système d'équations avec 2 inconnues et 2 équations en 2D et 3 en 3D. Pour info, \( A_1 = (x_1^A, y_1^A, z_1^A) \). Si tu réussis à trouver un tel couple (et il n'existe pas toujours ...), il suffit de vérifier que \( t_1\) est dans \([0,1] \) et \(t_2\) dans \([0, 1]\).
Avez-vous entendu parler de Julia ? Laissez-vous tenter ...
Pour la question 'Comment savoir si 2 segments sont sécants', on parle de 2 segments qui sont dans un même plan? Ou bien il y a une première étape qui consiste à vérifier qu'ils sont coplanaires.
En d'autres mots, on est en dimension 2, ou en dimension 3 ? Peut on parler des segments (A, B) avec A(xa,ya) et B(xb,yb) et (C,D) avec C(xc,yc) et D(xd,yd) ?
Alors en fait, l'idée va être savoir si deux segments se croisent seulement sur un plan (que ce soit x et y, y et z, ou x, z). Donc on est en effet en dimension 2. Mais les deux segments sont représentés avec trois coordonnées avec A(xa, ya , za), on va juste en récupérer deux.
Ah et déso j'arrive pas à sortir de la citation...
- Edité par AncyrHaldare 25 octobre 2019 à 18:06:04
La droite AB a pour équation : f(x,y)=(yb-ya)x + (xa-xb)y + xb*ya-xa*yb = 0
Cette droite divise le plan en 2 demi-plans. Dans un de ces 2 demi-plans, tous les points vérifient f(x,y)>0, et dans l'autre demi-plan, tous les points vérifient f(x,y)<0.
Une première condition pour que les 2 segments soient sécants, c'est que C et D ne soient pas dans le même demi-plan. Donc f(xc,yc) et et f(xd,yd) ne doivent pas être du même signe.
Ensuite, on va regarder la droite CD. L'équation de cette droite est : g(x,y)=(yd-yc)x + (xc-xd)y + xd*yc-xc*yd = 0
Et idem, cette droite découpe le plan en 2 demi-plans, et il faut que les points A et B ne soient pas dans le même demi-plan. Donc il faut que g(xa,ya) et g(xb,yb) ne soient pas de même signes.
Il reste un cas particulier, par exemple si le point A est exactement sur la droite CD. Dans ce cas, on aura g(xa,ya) =0 . Et c'est à toi de définir si dans ce cas, tu considères que les segments sont sécants, ou non.
En fait, en relisant la question, ma méthode ne convient pas. Elle permet 'facilement' de savoir si 2 segments sont sécants, mais elle ne donne pas le point d'intersection.
Du coup, la méthode de Nozio répond aux 2 besoins.
En fait, en relisant la question, ma méthode ne convient pas. Elle permet 'facilement' de savoir si 2 segments sont sécants, mais elle ne donne pas le point d'intersection.
Du coup, la méthode de Nozio répond aux 2 besoins.
Oui je pense aussi
Cela dit ta méthode est très intéressante et plus facilement programmable ; mais dommage que l'on ne puisse pas en obtenir les coordonnées du point d'intersection...
- Edité par AncyrHaldare 28 octobre 2019 à 14:43:01
Calcul du point d'intersection de deux segments
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Avez-vous entendu parler de Julia ? Laissez-vous tenter ...