Проверьте эту формулу по Бурк .
Мне недавно тоже пришлось решить эту проблему. Другой вариант - использовать (получить) уравнение линии (y = mx + c
), но есть несколько крайних случаев, которые вам необходимо учитывать, а также фактически проверить, находится ли точка пересечения внутри отрезка. Формула в ссылке выше работает, хотя я не могу прокомментировать, как уравнение перестроено, все, что я скажу, это работает;)
Редактировать
Как упомянул AndiDog, другой сайт, который я использовал (пример тоже отличный), это учебник . Поскольку это XNA, вторая ссылка будет прямо на вашей улице.
Редактировать (Контент по неработающей ссылке) :
Уравнения линий: Pa = P1 + ua ( P2 - P1 )
и Pb = P3 + ub ( P4 - P3 )
Решение для точки, где Pa = Pb
дает следующие два уравнения с двумя неизвестными (ua и ub)
x1 + ua (x2 - x1) = x3 + ub (x4 - x3)
а также
y1 + ua (y2 - y1) = y3 + ub (y4 - y3)
Решение дает следующие выражения для ua и ub
Подстановка любого из них в соответствующее уравнение для линии дает точку пересечения. Например, точка пересечения (x, y)
x = x1 + ua (x2 - x1)
y = y1 + ua (y2 - y1)
Примечания:
Знаменатели для уравнений для ua и ub одинаковы.
Если знаменатель для уравнений для ua и ub равен 0, то две прямые параллельны.
Если знаменатель и числитель для уравнений для ua и ub равны 0, тогда эти две линии совпадают.
Уравнения применимы к линиям, если требуется пересечение отрезков, то нужно только проверить, лежат ли значения ua и ub между 0 и 1. Какой из этих диапазонов находится в этом диапазоне, то соответствующий отрезок содержит точку пересечения. Если оба лежат в диапазоне от 0 до 1, то точка пересечения находится в обоих отрезках.