Вычислить векторы направления d1
и d2
для обоих сегментов (d1.x = x12-x11
и так далее, где x11
- начальная точка первого сегмента, x12
- конечная точка)
Рассчитать разница начальных точек (b.x = x21 - x11
и так далее)
Найти
p = (d1 x d2) (vector product)
Если p - нулевой вектор, то прямые параллельны.
Если линии пересекаются, (b.dot.p)
должно быть = 0 (скалярное произведение), иначе эти линии будут перекосами.
Точка пересечения:
ip = point11 + d1 * [ (b x d2).dot.p / (p.dot.p) ]
Обратите внимание, что значение в []
должно быть в диапазоне 0..1
, в противном случае линии пересекаются за пределами сегментов.
Похоже, аналогичный подход описан в wiki