Проверьте, пересекаются ли два отрезка линии в трехмерном пространстве - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь определить, пересекаются ли два отрезка линии в трехмерном пространстве. Оба сегмента задаются точками (x1, y1, z1) и (x2, y2, z2). Следующая статья описывает, как это сделать в 2D-пространстве: https://www.geeksforgeeks.org/check-if-two-given-line-segments-intersect/ но я не знаю, как отличить guish точки ориентации в 3D-пространстве (если они по часовой стрелке или против часовой стрелки) . Заранее спасибо.

1 Ответ

0 голосов
/ 06 августа 2020

Вычислить векторы направления 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...