Решение этой проблемы .Я пытаюсь (в 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 (они держат его в секрете) он сталкивается с ошибкой во время выполнения.Что может быть причиной этой ошибки / есть ли лучший способ проверить точки пересечения?