Pour repondre au probleme dans le cas de la 2D, il faut considerer qu'une droite c'est un vecteur directeur + un point du plan.
Un segement c'est un point + un vecteur qui definit le segment.
ainsi une droite (D) sera parametrée par :
(D) = (a ; b) * s + (u ; v)
(où (a ; b) est le vecteur directeur de la droite et (x ; y) un point par lequel passe D)
Si l'on cherche le point I = (x, y) intersection de deux droites (D1) et (D2)
on aura alors
(x, y) = (a1, b1) * s + (u1, v1)
(x, y) = (a2, b2) * r + (u2, v2)
soit le systeme 2 equation 2 inconues:
a1 * s - a2 * r = u2 - u1
b1 * s - b2 * r = v2 - v1
Ensuite on resoud le systeme avec comme inconues : (s, r)
- Ce systeme n'a pas de solution (si les deux droites sont parallele) si
det = -a1 * b2 + a2 * b1 = 0
- Si les droite ne sont pas parallele alors det <> 0 et on a
(je passe les calcules matricielles qui sont long et pas comprehensible)
d'où
r = (1 / det) * ( b2 * (u1 - u2) + a2 * (v2 - v1) )
s = (1 / det) * ( b1 * (u1 - u2) + a1 * (v2 - v1) )
Ensuite, il suffit d'analyser les resultats :
si 0 <= r <= 1 alors le point d'intersection se trouve sur le segement definit par le vecteur (a1, b1) et le point (u1, v1)
sinon le point d'intersection n'est pas sur ce segement
si 0 <= s <= 1 alors le point d'intesection se trouve sur le segement definit par le vecteur (a2, b2) et le point (u2, v2)
sinon le point d'intersection n'est pas sur ce segement
Pour la 3D l'equation de la droite devient
(D) = (a ; b ; c) * t + (u, v, w)
ensuite si l'on est sure que les deux droites se croisent, on vire une coordonée de notre droite et on se place dans le cas 2D (par exemple la composante sur les z) ainsi les droite de l'espace sont comme des droite du plan.
Sauf qu'il n'y a AUCUNE chance pour que deux droite de l'espace s'intersepte. Il faut donc calculer le point pour lequel la distance de ces deux droites est minimale, ce que l'on considerera comme point d'intesection (ensuite par une valeur de distance seuil on considerera que les deux droites se coupe ou pas)