【问题标题】:Finding intersection of points on a python graph generated by a list of points在由点列表生成的 python 图上查找点的交点
【发布时间】:2017-10-17 23:16:02
【问题描述】:

我试图找到由点列表生成的两条线之间的交点。

我有两个点列表,然后我用它们绘制了它们

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 的解决方案

【问题讨论】:

  • 请告诉我们你到目前为止尝试了什么(代码)。

标签: python-2.7 numpy matplotlib


【解决方案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)]

【讨论】:

  • 您能解释一下“直接计算每对连续线段的交集”是什么意思吗?我对 python 中的图形和数学库还很陌生,所以我不确定我是否完全理解你的建议。
  • 当然,我的意思是:stackoverflow.com/questions/3252194/…stackoverflow.com/questions/20677795/…。您需要为每对连续点执行此操作。不过,我强烈建议您使用shapely 解决方案。可靠且简单。
【解决方案2】:

减去两个数组的值并找到差数组的零点。

您可以使用scipy.signal.argrelmin 求差分数组绝对值的局部最小值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 2016-12-22
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多