python-3.x - 查找从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)。
解决方案
以下应该可以解决问题。它还处理 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]
推荐阅读
- python-3.x - python isinstance“用户定义数据类型”和“JSON对象”
- sql - 在 AutoMapper ProjectTo IQueryable 树中使用属性函数的最佳方式
- python - 使用 django 制作没有 id 的重复条目
- javascript - Googlebot 导致 JavaScript 错误
- javascript - 使用 discord.js,我如何将 API 结果的不必要部分切掉以发送?
- cassandra - 在 Cassandra 表中插入大型 JSON
- css - flex项目的flex-grow和width之间的不一致
- php - Discord OAuth2 不发送电子邮件
- ios - 如何在 Unity 导出的 iOS App 中使用 Swift Pod
- django - 如何从一个问题重定向到另一个具有相同外键(测验名称)的问题