Partage
  • Partager sur Facebook
  • Partager sur Twitter

Calcul du point d'intersection de deux segments

    24 octobre 2019 à 18:46:22

    Bonjour à tous!:)

    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:p). 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:p: 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.

    • Partager sur Facebook
    • Partager sur Twitter
      24 octobre 2019 à 23:09:41

      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) ?

      • Partager sur Facebook
      • Partager sur Twitter
        25 octobre 2019 à 11:26:53

        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

        \( A_1 + t_1\cdot (B_1 - A_1) = A_2 + t_2\cdot (B_2 - A_2) \)

        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]\).

        • Partager sur Facebook
        • Partager sur Twitter

        Avez-vous entendu parler de Julia ? Laissez-vous tenter ...

          25 octobre 2019 à 18:04:59

          tbc92 a écrit:

          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

          • Partager sur Facebook
          • Partager sur Twitter
            25 octobre 2019 à 19:32:52

            Donc A(xa,ya), B(xb,yb) ,  C(xc,yc), D(xd,yd).

            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.

            • Partager sur Facebook
            • Partager sur Twitter
              28 octobre 2019 à 9:41:02

              Merci beaucoup pour toutes ces réponses

              Je vais réfléchir à comment coder ça en python...

              Merci beaucoup!

              • Partager sur Facebook
              • Partager sur Twitter
                28 octobre 2019 à 11:33:35

                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.

                • Partager sur Facebook
                • Partager sur Twitter
                  28 octobre 2019 à 14:16:12

                  tbc92 a écrit:

                  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

                  • Partager sur Facebook
                  • Partager sur Twitter

                  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.
                  • Editeur
                  • Markdown