首页 > 解决方案 > 查找从python中的点列表创建的两条线的交点

问题描述

我有一个列表和一个值,如下所示:

y = [5, 6, 7, 3, 8, 10, 5, 2, 8, 15]
y0 = 9

如果我绘图,那么我将低于绘图

在此处输入图像描述

对于绘图,我使用以下代码:

a = []
for i in range(len(y)):
    a.append(y0)
x = []
for i in range(len(y)):
    x.append(i)

l5 = list(zip(y, x))
print(l5)
l6 = list(zip(a, x))
print(l6)

plt.plot(x, y, '-')
plt.plot(x, a, '-')
plt.show()

从图中我可以看到有 3 个交叉点。如何获得交点的索引(x 轴的 x 值)?例如,在上面的图中,类似于 (4.2, 5.3, 8.1)。

标签: python-3.x

解决方案


以下应该可以解决问题。它还处理 x 的分数。

y = [
    5, 6, 7, 3, 8, 10, 5, 2, 8, 15,
    9, 10, 9, 9, 8, 9  # additional corner cases
]
y0 = 9
intersecting_x = [
    float(x + (y0 - y[x]) / (y[x+1] - y[x]) if y[x+1] != y[x] else x + 1)
    for x in range(len(y)-1)
    if y[x+1] == y0 or y[x] < y0 < y[x+1] or y[x] > y0 > y[x+1]
]
print(intersecting_x)

# [4.5, 5.2, 8.142857142857142, 10.0, 12.0, 13.0, 15.0]

推荐阅读