Point d'intersection de deux lignes 2D ...

Point d'intersection de deux lignes 2D ... - Algo - Programmation

Marsh Posté le 05-01-2005 à 23:40:47    

Bonjour,
 
Je recherchais une méthode pour trouver le point d'intersection de deux lignes (dans le cas où les lignes ne sont pas parallèles).
 
Je me suis dit (sachant qu'au départ je connais deux points distincts de chaque lignes) que je pouvais utiliser les équations suivantes :

Droite D1 :
x = (x2-x1)t1 + x1
y = (y2-y1)t1 + y1

Droite D2 :
x = (x4-x3)t2 + x3
y = (y4-y3)t2 + y3


Les seules inconnues sont donc t1 et t2.
Alors j'ai commencé à résoudre mon système ...

a : (x2-x1)t1 + x1 = (x4-x3)t2 + x3
b : (y2-y1)t1 + y1 = (y4-y3)t2 + y3

Je pars de b, j'ajoute -y3 de chaque côté et je divise le tout par (y4-y3).

        (y2-y1)t1 + y1 - y3
c : t2 = -------------------
               (y4-y3)

Ensuite je vais utiliser a où je vais remplacer t2 par le résultat que je viens d'obtenir.

                             (y2-y1)t1 + y1 - y3
d : (x2-x1)t1 + x1 = (x4-x3)( ------------------- ) + x3
                                    (y4-y3)

Je sors t1 de la fraction et je multiplie tout par (y4-y3).

e : (y4-y3)(y2-y1)t1 + (y4-y3)x1 = (x4-x3)(y2-y1)t1 + (x4-x3)(y1-y3) + (y4-y3)x3

Voilà, tout ce passe bien, il ne me reste plus qu'à mettre les t1 du même côté et le reste de l'autre.

f : ((y4-y3)(y2-y1) - (x4-x3)(y2-y1))t1 = (x4-x3)(y1-y3) - (y4-y3)(x3-x1)

Il ne me reste plus qu'à diviser le tout par "((y4-y3)(y2-y1) - (x4-x3)(y2-y1))".

        (x4-x3)(y1-y3) - (y4-y3)(x3-x1)
g : t1 = -------------------------------
         (y4-y3)(y2-y1) - (x4-x3)(y2-y1)

Vous êtes encorre là ?Ben j'ai bientôt fini.
Tout content je code ma formule et ça ne marche pas du tout !!!
Je fais une recherche sur internet et je tombe sur un site qui expose une méthode qui ressemble beucoup à la mienne sauf qu'elle marche !!! (http://astronomy.swin.edu.au/~pbourke/geometry/lineline2d/)
La seule différence concerne le terme (x3-x1) qui est (x1-x3) sur le site.
Je suppose qu'il y a un truc qui ne va pas dans ma façon de résoudre mon équation, mais je ne vois pas l'erreur.
 
Pouvez-vous m'aider ?


Message édité par darkoli le 05-01-2005 à 23:43:12

---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
Reply

Marsh Posté le 05-01-2005 à 23:40:47   

Reply

Marsh Posté le 06-01-2005 à 00:36:17    

Pour la ligne e, il y a une petite erreur de copier/coller :
 

e : (y4-y3)(x2-x1)t1 + (y4-y3)x1 = (x4-x3)(y2-y1)t1 + (x4-x3)(y1-y3) + (y4-y3)x3


 
(x2-x1) et non pas (y2-y1)...
 
ensuite, on répercute la correction :

f : ((y4-y3)(x2-x1) - (x4-x3)(y2-y1))t1 = (x4-x3)(y1-y3) + (y4-y3)(x3-x1)


 
C'est ici que tu as fait la petite faute de signe. En passant le (y4-y3)x1 de l'autre côté tu sans doute voulu tout faire en même temps à droite. Ceci corrigé, on retrouve bien la formule magique :
 

        (x4-x3)(y1-y3) + (y4-y3)(x3-x1)
g : t1 = -------------------------------
         (y4-y3)(x2-x1) - (x4-x3)(y2-y1)


 

        (x4-x3)(y1-y3) - (y4-y3)(x1-x3)
g : t1 = -------------------------------
         (y4-y3)(x2-x1) - (x4-x3)(y2-y1)

Reply

Marsh Posté le 06-01-2005 à 08:08:57    

Tiens j'avais fait ça en Java une fois, ça gérait même les lignes verticales, faut que je le retrouve...

Reply

Marsh Posté le 06-01-2005 à 09:08:44    

pains-aux-raisins a écrit :

Pour la ligne e, il y a une petite erreur de copier/coller :
 

e : (y4-y3)(x2-x1)t1 + (y4-y3)x1 = (x4-x3)(y2-y1)t1 + (x4-x3)(y1-y3) + (y4-y3)x3


 
(x2-x1) et non pas (y2-y1)...
 
ensuite, on répercute la correction :

f : ((y4-y3)(x2-x1) - (x4-x3)(y2-y1))t1 = (x4-x3)(y1-y3) + (y4-y3)(x3-x1)


 
C'est ici que tu as fait la petite faute de signe. En passant le (y4-y3)x1 de l'autre côté tu sans doute voulu tout faire en même temps à droite. Ceci corrigé, on retrouve bien la formule magique :
 

        (x4-x3)(y1-y3) + (y4-y3)(x3-x1)
g : t1 = -------------------------------
         (y4-y3)(x2-x1) - (x4-x3)(y2-y1)


 

        (x4-x3)(y1-y3) - (y4-y3)(x1-x3)
g : t1 = -------------------------------
         (y4-y3)(x2-x1) - (x4-x3)(y2-y1)


Merci !!!
Oui il'y avait bien une erreur "bête".


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
Reply

Marsh Posté le 06-01-2005 à 09:10:57    

FlorentG a écrit :

Tiens j'avais fait ça en Java une fois, ça gérait même les lignes verticales, faut que je le retrouve...

Ben avec cette méthode ça gère très bien les lignes verticales, il n'y a aucun cas particulier à part le fait d'avoir deux lignes parallèle mais dans ce cas le dénominateur est nul, il suffit donc de le tester et la tour est joué.
 
Pour obtenir les coordonnées du point d'intersection (si le dénominateur n'est pas nul) il suffit d'utiliser les équations de la droite D1 et c'est fini.


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
Reply

Marsh Posté le 06-01-2005 à 09:12:56    

Ah oui, j'avais pas vu que t'utilisais deux points pour représenter la droite :D :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed