我正在尝试找到由一系列点生成的两条线之间的交集。
我有两个点列表,然后我使用
绘制它们import matplotlib.pyplot as plt
import numpy as np
a = arrayOfPoints1
plt.plot(*zip(*a))
b = arrayOfPoints2
plt.plot(*zip(*b))
plt.show()
的图表
我的目标是找到这两个图形现在相交的所有点(蓝线和绿线交点)。乍一看,看起来这些点可能只是数组a和b中的点,但是当生成点之间的线时,可能会出现一些不在数组中的交叉点。
如何找到所有交叉点?
注意:我正在寻找适用于Python 2.7的解决方案
答案 0 :(得分:1)
如果两个图形使用相同的X轴值(在同一个阵列上评估的不同函数),则可以通过直接计算每个连续段对的交集来手动完成。你必须考虑几种情况(如果段是平行的,等等)。可以使用平面中的线方程来计算交点。您可以通过获取两个X轴值的并集并计算所需的值来为一般情况添加此方法。
更容易(但如果你必须计算数百万次,效率可能更低),就是依靠shapely
库。如果路径不使用相同的X轴值,则此方法也适用。一个简单的例子,说明如何在下面进行。
from shapely.geometry import LineString
l1 = LineString([(0,0), (10,10)])
l2 = LineString([(1,0), (5,10), (10,0)])
intersection = l1.intersection(l2)
intersect_points = [list(p.coords)[0] for p in intersection]
print intersect_points
这将返回
[(1.6666666666666667, 1.6666666666666665), (6.666666666666667, 6.666666666666667)]
答案 1 :(得分:-2)
减去两个数组的值并找到差值数组的零。
您可以使用scipy.signal.argrelmin
查找差异数组绝对值的局部最小值。