Точка пересечения координат
Оранжевая линия c пересекает линию x,y в некой точке. Каждое значение x равняется какому то значению h. Как можно найти пересечение синей и оранжевой линии (назовем это точку cross например) и какой h она соответсвует? Думаю если значение находится между двумя h то округляем в сторону куда ближе.
x = [9,8,7,6,5,4,3,2,1]
y = [1,1.5,2,2.5,3,3.5,4,4.5,5]
h = [1127,1231,1237,1139,1127,1110,1185,1221,1031]
c = [2.0, 2.1428, 2.2857, 3.4285, 3.5714, 5.7142, 5.8857, 8.0]
plt.plot(x,y)
plt.plot(c)
plt.show()
Попробовал сделать по аналогии с комментарием ниже, но получается не то совсем:
import numpy as np
import matplotlib.pyplot as plt
x = [9,8,7,6,5,4,3,2,1]
y = [1,1.5,2,2.5,3,3.5,4,4.5,5]
h = [1127,1231,1237,1139,1127,1110,1185,1221,1031]
c = [2.0, 2.1428, 2.2857, 3.4285, 3.5714, 5.7142, 5.8857, 8.0,8]
x = np.array(x)
y = np.array(y)
c = np.array(c)
plt.plot(x, y, '-')
plt.plot(c, '-')
idx = np.argwhere(np.diff(np.sign(x - c)).flatten())
plt.plot(x[idx], f[idx], 'ro')
plt.show()
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
# вы задали точки `x` в обратном порядке - исправляем этот "беспорядок"
x0 = np.sort(x)
# тоже самое делаем для `y`
y0 = np.array(y)[np.argsort(x)]
Сначала найдите коэффициенты линейной функции f(x), которые будут лучше всего соответствовать точкам x0 и y0:
coefficients = np.polyfit(x0, y0, 1)
f = np.poly1d(coefficients)
теперь у нас есть не просто набор точек лежащих на синей прямой, а сама функция задающая значения точек этой прямой.
Теперь можно найти точку пересечения:
x1 = np.arange(len(c))
idx = np.argwhere(np.diff(np.sign(f(x1) - c))).flatten()
if idx:
p_cross = np.array([x0[idx[0]], c[idx[0]]])
print(f"Координаты точки пересечения: {p_cross}")
Вывод на экран:
Координаты точки пересечения: [4. 3.4285]
