Intersection point of 2 lines defined by 2 points eachIntersection between two linesParallel Lines, One point...

Roll the carpet

Are astronomers waiting to see something in an image from a gravitational lens that they've already seen in an adjacent image?

Is it legal for company to use my work email to pretend I still work there?

Maximum likelihood parameters deviate from posterior distributions

How can I prevent hyper evolved versions of regular creatures from wiping out their cousins?

How is it possible to have an ability score that is less than 3?

What does it mean to describe someone as a butt steak?

Cross compiling for RPi - error while loading shared libraries

Can a vampire attack twice with their claws using Multiattack?

What does "Puller Prush Person" mean?

Is it inappropriate for a student to attend their mentor's dissertation defense?

LaTeX: Why are digits allowed in environments, but forbidden in commands?

What's the output of a record needle playing an out-of-speed record

What's that red-plus icon near a text?

What's the point of deactivating Num Lock on login screens?

Can a Cauchy sequence converge for one metric while not converging for another?

A newer friend of my brother's gave him a load of baseball cards that are supposedly extremely valuable. Is this a scam?

How much of data wrangling is a data scientist's job?

Is it unprofessional to ask if a job posting on GlassDoor is real?

Codimension of non-flat locus

meaning of に in 本当に?

What does the "remote control" for a QF-4 look like?

Which country benefited the most from UN Security Council vetoes?

Why "Having chlorophyll without photosynthesis is actually very dangerous" and "like living with a bomb"?



Intersection point of 2 lines defined by 2 points each


Intersection between two linesParallel Lines, One point on each.Intersection between 2 linesStraight lines - point of intersectionFinding the intersection point between two lines using a matrixCalculate intersection point between two linescollision point of circle and lineFind intersection point of two straight linesIntersection point of multiple 3D linesFour Dimensional intersection point













2












$begingroup$


I'm implementing this in code, but I'll rewrite it so that it is easier understood (like pseudocode):



# a = pt 1 on line 1
# b = pt 2 on line 1
# c = pt 1 on line 2
# d = pt 2 on line 2
def intersect(a,b,c,d):

# stuff for line 1
a1 = b.y-a.y
b1 = a.x-b.x
c1 = a1*a.x + b1*a.y

# stuff for line 2
a2 = d.y-c.y
b2 = c.x-d.x
c2 = a2*c.x + b2*c.y

determinant = a1*b2 - a2*b1

if (determinant == 0):
# Return (infinity, infinity) if they never intersect
# By "never intersect", I mean that the lines are parallel to each other
return math.inf, math,inf
else:
x = (b2*c1 - b1*c2)/determinant
y = (a1*c2 - a2*c1)/determinant
return x,y


All the above works, ... but only does by assuming that the lines extend infinitely in each direction, like a linear equation. I'll show what I mean here.



There are the 2 lines, red and green, and the gold dot is what is returned when I test this code ... but the lines don't actually intersect. What can be used to test whether the lines truly intersect?



Heres the actual Python code if needed.










share|cite|improve this question











$endgroup$

















    2












    $begingroup$


    I'm implementing this in code, but I'll rewrite it so that it is easier understood (like pseudocode):



    # a = pt 1 on line 1
    # b = pt 2 on line 1
    # c = pt 1 on line 2
    # d = pt 2 on line 2
    def intersect(a,b,c,d):

    # stuff for line 1
    a1 = b.y-a.y
    b1 = a.x-b.x
    c1 = a1*a.x + b1*a.y

    # stuff for line 2
    a2 = d.y-c.y
    b2 = c.x-d.x
    c2 = a2*c.x + b2*c.y

    determinant = a1*b2 - a2*b1

    if (determinant == 0):
    # Return (infinity, infinity) if they never intersect
    # By "never intersect", I mean that the lines are parallel to each other
    return math.inf, math,inf
    else:
    x = (b2*c1 - b1*c2)/determinant
    y = (a1*c2 - a2*c1)/determinant
    return x,y


    All the above works, ... but only does by assuming that the lines extend infinitely in each direction, like a linear equation. I'll show what I mean here.



    There are the 2 lines, red and green, and the gold dot is what is returned when I test this code ... but the lines don't actually intersect. What can be used to test whether the lines truly intersect?



    Heres the actual Python code if needed.










    share|cite|improve this question











    $endgroup$















      2












      2








      2





      $begingroup$


      I'm implementing this in code, but I'll rewrite it so that it is easier understood (like pseudocode):



      # a = pt 1 on line 1
      # b = pt 2 on line 1
      # c = pt 1 on line 2
      # d = pt 2 on line 2
      def intersect(a,b,c,d):

      # stuff for line 1
      a1 = b.y-a.y
      b1 = a.x-b.x
      c1 = a1*a.x + b1*a.y

      # stuff for line 2
      a2 = d.y-c.y
      b2 = c.x-d.x
      c2 = a2*c.x + b2*c.y

      determinant = a1*b2 - a2*b1

      if (determinant == 0):
      # Return (infinity, infinity) if they never intersect
      # By "never intersect", I mean that the lines are parallel to each other
      return math.inf, math,inf
      else:
      x = (b2*c1 - b1*c2)/determinant
      y = (a1*c2 - a2*c1)/determinant
      return x,y


      All the above works, ... but only does by assuming that the lines extend infinitely in each direction, like a linear equation. I'll show what I mean here.



      There are the 2 lines, red and green, and the gold dot is what is returned when I test this code ... but the lines don't actually intersect. What can be used to test whether the lines truly intersect?



      Heres the actual Python code if needed.










      share|cite|improve this question











      $endgroup$




      I'm implementing this in code, but I'll rewrite it so that it is easier understood (like pseudocode):



      # a = pt 1 on line 1
      # b = pt 2 on line 1
      # c = pt 1 on line 2
      # d = pt 2 on line 2
      def intersect(a,b,c,d):

      # stuff for line 1
      a1 = b.y-a.y
      b1 = a.x-b.x
      c1 = a1*a.x + b1*a.y

      # stuff for line 2
      a2 = d.y-c.y
      b2 = c.x-d.x
      c2 = a2*c.x + b2*c.y

      determinant = a1*b2 - a2*b1

      if (determinant == 0):
      # Return (infinity, infinity) if they never intersect
      # By "never intersect", I mean that the lines are parallel to each other
      return math.inf, math,inf
      else:
      x = (b2*c1 - b1*c2)/determinant
      y = (a1*c2 - a2*c1)/determinant
      return x,y


      All the above works, ... but only does by assuming that the lines extend infinitely in each direction, like a linear equation. I'll show what I mean here.



      There are the 2 lines, red and green, and the gold dot is what is returned when I test this code ... but the lines don't actually intersect. What can be used to test whether the lines truly intersect?



      Heres the actual Python code if needed.







      linear-algebra matrices python






      share|cite|improve this question















      share|cite|improve this question













      share|cite|improve this question




      share|cite|improve this question








      edited 1 hour ago









      Ethan Bolker

      45.6k553120




      45.6k553120










      asked 2 hours ago









      crazicrafter1crazicrafter1

      197




      197






















          2 Answers
          2






          active

          oldest

          votes


















          2












          $begingroup$

          I think you are asking for the intersection point (if any) of two line segments, not two lines.



          Once you find the intersection point $P$ as you have, you can check that it is between the endpoints $A$ and $B$ of a segment by solving the equation
          $$
          tA + (1-t)B = P
          $$

          for $t$ and checking that $t$ is between $0$ and $1$. That equation will have a solution because you know $P$ is on the line. Do that for each of the two segments.



          Warning: you may have numerical instability if the determinant is close to $0$. That will happen when the lines are nearly parallel.



          (There may be a shorter way to do this from scratch, but this will work.)






          share|cite|improve this answer











          $endgroup$





















            2












            $begingroup$

            You have the point $x$ where the infinite lines intersect. You need to check whether that point is on both finite line segments.



            Line segment 1 has endpoints $a$ and $b$. Use these to make a vector $vec{ab}=b-a$. If the dot product $vec{ab}cdotvec{ax}$ is positive, then $x$ is forward of $a$; if it's negative, then $x$ is behind $a$. Likewise, if $vec{ab}cdotvec{bx}$ is positive, then $x$ is forward of $b$. The point $x$ is on the segment if it's between $a$ and $b$.



            Do the same test for the other line segment.






            share|cite|improve this answer









            $endgroup$














              Your Answer





              StackExchange.ifUsing("editor", function () {
              return StackExchange.using("mathjaxEditing", function () {
              StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
              StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
              });
              });
              }, "mathjax-editing");

              StackExchange.ready(function() {
              var channelOptions = {
              tags: "".split(" "),
              id: "69"
              };
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function() {
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled) {
              StackExchange.using("snippets", function() {
              createEditor();
              });
              }
              else {
              createEditor();
              }
              });

              function createEditor() {
              StackExchange.prepareEditor({
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: true,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: 10,
              bindNavPrevention: true,
              postfix: "",
              imageUploader: {
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              },
              noCode: true, onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              });


              }
              });














              draft saved

              draft discarded


















              StackExchange.ready(
              function () {
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmath.stackexchange.com%2fquestions%2f3176543%2fintersection-point-of-2-lines-defined-by-2-points-each%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              2












              $begingroup$

              I think you are asking for the intersection point (if any) of two line segments, not two lines.



              Once you find the intersection point $P$ as you have, you can check that it is between the endpoints $A$ and $B$ of a segment by solving the equation
              $$
              tA + (1-t)B = P
              $$

              for $t$ and checking that $t$ is between $0$ and $1$. That equation will have a solution because you know $P$ is on the line. Do that for each of the two segments.



              Warning: you may have numerical instability if the determinant is close to $0$. That will happen when the lines are nearly parallel.



              (There may be a shorter way to do this from scratch, but this will work.)






              share|cite|improve this answer











              $endgroup$


















                2












                $begingroup$

                I think you are asking for the intersection point (if any) of two line segments, not two lines.



                Once you find the intersection point $P$ as you have, you can check that it is between the endpoints $A$ and $B$ of a segment by solving the equation
                $$
                tA + (1-t)B = P
                $$

                for $t$ and checking that $t$ is between $0$ and $1$. That equation will have a solution because you know $P$ is on the line. Do that for each of the two segments.



                Warning: you may have numerical instability if the determinant is close to $0$. That will happen when the lines are nearly parallel.



                (There may be a shorter way to do this from scratch, but this will work.)






                share|cite|improve this answer











                $endgroup$
















                  2












                  2








                  2





                  $begingroup$

                  I think you are asking for the intersection point (if any) of two line segments, not two lines.



                  Once you find the intersection point $P$ as you have, you can check that it is between the endpoints $A$ and $B$ of a segment by solving the equation
                  $$
                  tA + (1-t)B = P
                  $$

                  for $t$ and checking that $t$ is between $0$ and $1$. That equation will have a solution because you know $P$ is on the line. Do that for each of the two segments.



                  Warning: you may have numerical instability if the determinant is close to $0$. That will happen when the lines are nearly parallel.



                  (There may be a shorter way to do this from scratch, but this will work.)






                  share|cite|improve this answer











                  $endgroup$



                  I think you are asking for the intersection point (if any) of two line segments, not two lines.



                  Once you find the intersection point $P$ as you have, you can check that it is between the endpoints $A$ and $B$ of a segment by solving the equation
                  $$
                  tA + (1-t)B = P
                  $$

                  for $t$ and checking that $t$ is between $0$ and $1$. That equation will have a solution because you know $P$ is on the line. Do that for each of the two segments.



                  Warning: you may have numerical instability if the determinant is close to $0$. That will happen when the lines are nearly parallel.



                  (There may be a shorter way to do this from scratch, but this will work.)







                  share|cite|improve this answer














                  share|cite|improve this answer



                  share|cite|improve this answer








                  edited 1 hour ago

























                  answered 1 hour ago









                  Ethan BolkerEthan Bolker

                  45.6k553120




                  45.6k553120























                      2












                      $begingroup$

                      You have the point $x$ where the infinite lines intersect. You need to check whether that point is on both finite line segments.



                      Line segment 1 has endpoints $a$ and $b$. Use these to make a vector $vec{ab}=b-a$. If the dot product $vec{ab}cdotvec{ax}$ is positive, then $x$ is forward of $a$; if it's negative, then $x$ is behind $a$. Likewise, if $vec{ab}cdotvec{bx}$ is positive, then $x$ is forward of $b$. The point $x$ is on the segment if it's between $a$ and $b$.



                      Do the same test for the other line segment.






                      share|cite|improve this answer









                      $endgroup$


















                        2












                        $begingroup$

                        You have the point $x$ where the infinite lines intersect. You need to check whether that point is on both finite line segments.



                        Line segment 1 has endpoints $a$ and $b$. Use these to make a vector $vec{ab}=b-a$. If the dot product $vec{ab}cdotvec{ax}$ is positive, then $x$ is forward of $a$; if it's negative, then $x$ is behind $a$. Likewise, if $vec{ab}cdotvec{bx}$ is positive, then $x$ is forward of $b$. The point $x$ is on the segment if it's between $a$ and $b$.



                        Do the same test for the other line segment.






                        share|cite|improve this answer









                        $endgroup$
















                          2












                          2








                          2





                          $begingroup$

                          You have the point $x$ where the infinite lines intersect. You need to check whether that point is on both finite line segments.



                          Line segment 1 has endpoints $a$ and $b$. Use these to make a vector $vec{ab}=b-a$. If the dot product $vec{ab}cdotvec{ax}$ is positive, then $x$ is forward of $a$; if it's negative, then $x$ is behind $a$. Likewise, if $vec{ab}cdotvec{bx}$ is positive, then $x$ is forward of $b$. The point $x$ is on the segment if it's between $a$ and $b$.



                          Do the same test for the other line segment.






                          share|cite|improve this answer









                          $endgroup$



                          You have the point $x$ where the infinite lines intersect. You need to check whether that point is on both finite line segments.



                          Line segment 1 has endpoints $a$ and $b$. Use these to make a vector $vec{ab}=b-a$. If the dot product $vec{ab}cdotvec{ax}$ is positive, then $x$ is forward of $a$; if it's negative, then $x$ is behind $a$. Likewise, if $vec{ab}cdotvec{bx}$ is positive, then $x$ is forward of $b$. The point $x$ is on the segment if it's between $a$ and $b$.



                          Do the same test for the other line segment.







                          share|cite|improve this answer












                          share|cite|improve this answer



                          share|cite|improve this answer










                          answered 1 hour ago









                          mr_e_manmr_e_man

                          1,1401424




                          1,1401424






























                              draft saved

                              draft discarded




















































                              Thanks for contributing an answer to Mathematics Stack Exchange!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              Use MathJax to format equations. MathJax reference.


                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmath.stackexchange.com%2fquestions%2f3176543%2fintersection-point-of-2-lines-defined-by-2-points-each%23new-answer', 'question_page');
                              }
                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              Anexo:Material bélico de la Fuerza Aérea de Chile Índice Aeronaves Defensa...

                              Always On Availability groups resolving state after failover - Remote harden of transaction...

                              update json value to null Announcing the arrival of Valued Associate #679: Cesar Manara ...