Нахождение точки пересечения двух кусочных функций

Решение этой проблемы. Я пытаюсь (в Python2) получить пересечение двух кусочных функций, которые представлены в виде массивов: a=[[x1,y1],[x2,y2],...]аналогично для б. Кусочная функция определяется прямыми, соединяющими точки на двумерном графике. То, что я хочу найти, это координата X их пересечения. Так что я имею в виду следующее. Во-первых, я выбираю первые две точки вверх (массив a) и вычисляю градиент и y-точку пересечения прямой, соединяющей их. Затем я перебираю цикл вниз (массив b) и проверяю, находится ли точка пересечения и находится ли она в пределах диапазона точек. Если это так, он распечатывает это.

found = False
for i in range(1, len(up)):
    a = float((up[i][1]-up[i-1][1]))/(up[i][0]-up[i-1][0])
    b = up[i][1]-a*up[i][0]
    for j in range(1, len(down)):
        c = float((down[j][1]-down[j-1][1]))/(down[j][0]-down[j-1][0])
        d = down[j][1]-c*down[j][0]
        x =(d-b)/(a-c)
        if up[i-1][0]<=x<=up[i][0] and down[j-1][0]<=x<=down[j][0]:
            print x
            found = True
            break
if found: break

Кажется, это работает с каждым тестовым набором, который я дал, и с каждым тестовым примером, который я могу придумать. Однако в тестовом примере № 5(они держат его в секрете) он сталкивается с ошибкой во время выполнения. Что может быть причиной этой ошибки / есть ли лучший способ проверить точки пересечения?

0 ответов

Другие вопросы по тегам