сначала нужно рассчитать пересечение линий. Я привел вам пример, как это сделать. Функция draw_smooth_line
проведет плавную линию между 3 точками. Вы можете добавить logi c для получения лучших очков из вашего списка, если вам это нужно.
import matplotlib.pyplot as plt
from scipy.ndimage.filters import gaussian_filter1d
import numpy as np
from scipy.interpolate import interp1d
def draw_smooth_line(left_x, left_y, mid_x, mid_y, right_x, right_y):
x = [left_x, mid_x, right_x]
y = [left_y, mid_y, right_y]
x_new = np.linspace(left_x, right_x,500)
f = interp1d(x, y, kind='quadratic')
y_smooth=f(x_new)
plt.plot (x_new,y_smooth)
def findIntersection(x1,y1,x2,y2,x3,y3,x4,y4):
px= ( (x1*y2-y1*x2)*(x3-x4)-(x1-x2)*(x3*y4-y3*x4) ) / ( (x1-x2)*(y3-y4)-(y1-y2)*(x3-x4) )
py= ( (x1*y2-y1*x2)*(y3-y4)-(y1-y2)*(x3*y4-y3*x4) ) / ( (x1-x2)*(y3-y4)-(y1-y2)*(x3-x4) )
return [px, py]
x1, y1 = [-1, 12], [1, 4]
x2, y2 = [1, 10], [3, 2]
x3, y3 = findIntersection(x1[0],y1[0],x1[1],y1[1],x2[0],y2[0],x2[1],y2[1])
draw_smooth_line(x1[1], y1[1], x3, y3, x2[0], y2[0])
plt.plot(x1, y1, x2, y2, x3, y3, marker = 'o')
plt.show()
Вот результат
результат