Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Точка пересечения отрезков, нужна помощь :)


Автор: Proger10 12.9.2016, 08:41
У меня такая формула для нахождения пересечения отрезков, заданными координатами: 
x1,y1 - начальная точка первого отрезка
x2,y2 - конечная точка первого
и аналогично для второго: x3, y3 и x4,y4.

Формула:
Код

x = -((x1*y2-x2*y1)*(x4-x3)-(x3*y4-x4*y3)*(x2-x1))/((y1-y2)*(x4-x3)-(y3-y4)*(x2-x1));
y = ((y3-y4)*(-x)-(x3*y4-x4*y3))/(x4-x3);


Проблема в том, что я не знаю, что делать с тем, когда второй отрезок вертикальный и знаменатель получается равен нулю. 

Как работать с этой неопределённостью? Или у меня в формуле ошибка? smile Предварительно я проверяю - существует ли вообще там точка пересечения. 

Может, кто скинет получше алгоритм нахождения точки пересечения? smile

Автор: Lipetsk 12.9.2016, 13:29
больше похоже на формулу точки пересечения прямых заданных двумя точками

Автор: Akina 12.9.2016, 13:41
Цитата(Proger10 @  12.9.2016,  09:41 Найти цитируемый пост)
Как работать с этой неопределённостью? Или у меня в формуле ошибка? 

Ошибка не в формуле, а в методике.
Сначала нужно определить, существует ли точка пересечения прямых, на которых лежат отрезки. Тупо по ненулевому значению главного определителя соотв. СЛАУ.
Если оно нулевое - определяешь, совпадают эти прямые или параллельны. Если не совпадают - пересечения нет. Если совпадают - проверяешь, накладываются отрезки или нет. Если накладываются - пересечение есть (вершиной или отрезком).
Если оно ненулевое - считаешь координаты точки пересечения, а затем проверяешь, лежит ли она на (любом) отрезке. Если да - это точка пересечения, а нет - значит нет.
Так что эти твои формулы (даже если они верны, проверять лениво) - не первое, что следует считать.

Автор: Курсант 14.1.2017, 12:57
Маленькая поправочка - вычисленная точка пересечения должна лежать на каждом из отрезков.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)