我有两条线在一点交叉.我知道这两行的终点.如何计算Python中的交叉点?
# Given these endpoints
#line 1
A = [X, Y]
B = [X, Y]
#line 2
C = [X, Y]
D = [X, Y]
# Compute this:
point_of_intersection = [X, Y]
解决方法:
与其他建议不同,这很简短,不使用像numpy这样的外部库. (并不是说使用其他库是坏的…它不是很好,特别是对于这么简单的问题.)
def line_intersection(line1, line2):
xdiff = (line1[0][0] - line1[1][0], line2[0][0] - line2[1][0])
ydiff = (line1[0][1] - line1[1][1], line2[0][1] - line2[1][1])
def det(a, b):
return a[0] * b[1] - a[1] * b[0]
div = det(xdiff, ydiff)
if div == 0:
raise Exception('lines do not intersect')
d = (det(*line1), det(*line2))
x = det(d, xdiff) / div
y = det(d, ydiff) / div
return x, y
print line_intersection((A, B), (C, D))
而且仅供参考,我会使用元组而不是列表来表示你的观点.例如.
A = (X, Y)
编辑:最初有一个错字.那是@ 2014年9月7日,感谢@zidik.
这只是以下公式的Python音译,其中行是(a1,a2)和(b1,b2),交点是p. (如果分母为零,则线条没有唯一的交叉点.)