A lot of similar questions have already been asked and answered here, but after browsing them none quite solved my issue. I am looking for a reliable algorithm to find the intersection of two infinite lines specified by two points each. In my case, there are two complications:
- It is not guaranteed that the intersection point lies between the two vertices specifying each line (which means solutions like this one won't work), and
- the lines can be oriented arbitrarily in the 2-D plane, which means that solutions based on slope and intercept won't always work (since one of the lines can be oriented vertically, yielding infinite slope and intercept)
My current approach illustrates the shortomings of a slope-and-interception based approach. This issue could be partially circumvented by implementing a step which rotates the entire system so no line is vertical, but this doesn't seem very elegant. Do you know a better approach?
import numpy as np
# The intersection point of the example below should be (0,0)
# Vertices for the first line
p1_start = np.asarray([-5, 0])
p1_end = np.asarray([-3, 0])
# Vertices for the second line
p2_start = np.asarray([0, 4])
p2_end = np.asarray([0, 2])
# Calculate slope and intercept for the first line
m_1 = (p1_end[1]-p1_start[1])/(p1_end[0]-p1_start[0])
t_1 = p1_start[1] - m_1*p1_start[0]
# The slope and intercept are zero
print('First line')
print('slope = '+str(m_1))
print('intercept = '+str(t_1))
# Calculate slope and intercept for the second line
m_2 = (p2_end[1]-p2_start[1])/(p2_end[0]-p2_start[0])
t_2 = p2_start[1] - m_2*p2_start[0]
# The slope and intercept are infinite
print('Second line')
print('slope = '+str(m_2))
print('intercept = '+str(t_2))
# Find out where these points interset
# Doesn't work if one of the slopes is infinite
intersection_point_x = (t_2-t_1)/(m_1-m_2)
intersection_point_y = intersection_point_x*m_1 + t_1
print('Intersection point')
print(intersection_point_x)
print(intersection_point_y)