import numpy as np
import matplotlib.pyplot as plt
x = [1,2]
y1 = [11, 0]
y2 = [0, 5]
np_x = np.array(x)
np_y1 = np.array(y1)
np_y2 = np.array(y2)
idx = np.argwhere(np.diff(np.sign(np_y2 - np_y1))).flatten()
isect = zip(np_x[idx], np_y1[idx])
for x,y in isect:
print(f'({x}, {y})')
plt.plot(np_x, np_y1)
plt.plot(np_x, np_y2)
plt.show()
下面是上述代码的图形.然而,打印的交叉点是(1,11)
我想是因为它被四舍五入成整数。
我怎样才能得到精确的交点?(如(1.7,3.8)
谢谢
4条答案
按热度按时间13z8s7eq1#
对数据进行插值以获得更多点,从一个y数组中减去另一个y数组,计算每个点的差值符号,检测符号何时发生变化,获取此变化的索引:这就是交集索引。
编辑:我的答案和其他两个答案的区别在于,如果你的数据不是仿射的,我的答案仍然有效。
wribegjk2#
两条直线的交点应该是可以用数学方法求解的,它是
(-(np_x[0]*(np_y1[1]-np_y2[1]) + np_x[1]*(np_y2[0]-np_y1[0]))/(np_y1[0]-np_y1[1]-np_y2[0]+np_y2[1]), -(y1[1]*y2[0]-y1[0]*y2[1])/(np_y1[0]-np_y1[1]-np_y2[0]+np_y2[1]))
。qyzbxkaa3#
您需要使用更密集的数组值来获得更精确的结果。
输出:
用于检查的图形输出:
ohtdti5x4#
您可以通过查找与您提供的每对点相交的每个线性函数的斜率和交点来分析结果。* * x = 27/16 = 1.6875****y = 55/16 = 3.4375**。