python построение графика линейной функции

Есть точки графика в массиве [[x,y],[x,y]] и тд, как по первым двум точкам построить прямую и найти где далее график лежит на этой прямой. Была идея построить прямую и все значения через которые она проходит сохранять в другой массив, далее другим циклом сверять значения, но это очень ресурсозатратно т.к. график на 40мб файла. Можно ли это делать налету? p.s. Визуальное отображение не нужно. С примера картинки: по 1,1 и 2,2 строим прямую и налету находим что 7,7 и 12,12 лежат на ней.

graph


Ответы (1 шт):

Автор решения: CrazyElf

Ищем коэффициент: разница между первыми двумя точками по y, делённая на разницу по x. А потом для каждой следующей точки проверяем, что у неё такой же коэффициент разности координат с первой точкой выходит. Только поскольку числа с плавающей точкой не совсем точные, проверяем коэффициент не на точное совпадение, а с некоей погрешностью:

def calc_coeff(points, i, j):
    return (points[j][1]-points[i][1])/(points[j][0]-points[i][0])

points = [[1,1],[2,2],[4,3],[5,7],[7,7],[10,8],[10,12],[12,12],[14,13]]
bias = calc_coeff(points, 0, 1)
epsilon = 1e-5
for i in range(2, len(points)):
    if abs(calc_coeff(points, i, 0) - bias) < epsilon:
        print(points[i])

Вывод:

[7, 7]
[12, 12]

Переделать этот код под потоковый режим поступления данных совсем не сложно, тут весь доступ к данным последовательный. Единственное что - нужно будет запомнить куда-то координаты первой точки и передавать их в функцию подсчёта коэффициента.

→ Ссылка