查找由点列表生成的python图上的点的交点

时间:2015-12-07 06:17:56

标签: python-2.7 numpy matplotlib

我正在尝试找到由一系列点生成的两条线之间的交集。

我有两个点列表,然后我使用

绘制它们
import matplotlib.pyplot as plt
import numpy as np

a = arrayOfPoints1
plt.plot(*zip(*a))
b = arrayOfPoints2
plt.plot(*zip(*b))
plt.show()

现在我已经生成了一个类似于enter image description here

的图表

我的目标是找到这两个图形现在相交的所有点(蓝线和绿线交点)。乍一看,看起来这些点可能只是数组a和b中的点,但是当生成点之间的线时,可能会出现一些不在数组中的交叉点。

如何找到所有交叉点?

注意:我正在寻找适用于Python 2.7的解决方案

2 个答案:

答案 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查找差异数组绝对值的局部最小值。