如何找到两个线段的交点?

时间:2014-03-15 00:01:59

标签: python matplotlib

假设我们有两个有限的线段,每个线段由两个点(在两个空间中)定义。我想找到一种方法来获得这两条线的交点。最后,我想将其扩展到一组连接的线段。

我在这里找到了一个很好的解决方案:Python - matplotlib: find intersection of lineplots。然而,这依赖于scipy,我相信它需要BLAS,这是出于各种原因我想避免。

matplotlib有一个名为Path的模块,它有一个intersects_path()函数(http://matplotlib.org/api/path_api.html#matplotlib.path.Path.intersects_path),它对于交集的存在返回true或false,但不是我需要的特定位置。

有没有人知道这方面的干净方法?

我想出的任何解决方案都很冗长,如果解决方案已经存在,我真的不想重新发明轮子。

谢谢!

1 个答案:

答案 0 :(得分:15)

为了完成,我想我会发布我使用的最终解决方案。

使用Shapely(https://pypi.python.org/pypi/Shapely)代码看起来很简单:

from shapely.geometry import LineString

line1 = LineString([(0,0), (1,0), (1,1)])
line2 = LineString([(0,1), (1,1)])

print(line1.intersection(line2))

返回:

POINT (1 1)

关于这一点的好处在于它将无缝地处理单点交叉和段的交叉,并且相同的技术可以应用于更复杂的对象。