Форум программистов, компьютерный форум, киберфорум
jogano
Войти
Регистрация
Восстановить пароль
Оценить эту запись

Найти точку пересечения двух отрезков в пространстве

Запись от jogano размещена 31.12.2014 в 07:47

Дано: отрезки АВ и СD, заданные координатами концов https://www.cyberforum.ru/cgi-bin/latex.cgi?A\left ( x_1;y_1; z_1 \right ), \: B\left ( x_2;y_2; z_2 \right ), \: C\left ( x_3;y_3; z_3 \right ), \: D\left ( x_4;y_4; z_4 \right ), \:
Нужно определить, пересекаются ли два отрезка, и если пересекаются, найти точку пересечения.
1. Проверка того, что прямые АВ и СD лежат в одной плоскости. Это будет так, если https://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{vmatrix}x_2-x_1 & y_2-y_1 & z_2-z_1\\ x_3-x_1 & y_3-y_1 & z_3-z_1\\ x_4-x_1 & y_4-y_1 & z_4-z_1\end{vmatrix} =0. Если это так, переходим к пункту 2.
2. Точка на отрезке АВ выражается через координаты концов таким образом: https://www.cyberforum.ru/cgi-bin/latex.cgi?\bar{OX} = u \bar{OA} + \left(1-u \right)\bar{OB}, причём https://www.cyberforum.ru/cgi-bin/latex.cgi?u \in \left[0;1 \right]. Если этот параметр не в этих пределах, то точка Х лежит на продолжении отрезка АВ, а не на самом отрезке. Та же точка Х (пересечения) выражается через координаты концов С и Д так: https://www.cyberforum.ru/cgi-bin/latex.cgi?\bar{OX} = v \bar{OC} + \left(1-v \right)\bar{OD}, \: v \in \left[0;1 \right]. Получаем https://www.cyberforum.ru/cgi-bin/latex.cgi?u \left( \bar{OA} -\bar{OB}\right)+ \bar{OB}=v\left(\bar{OC}-\bar{OD} \right)+\bar{OD}
https://www.cyberforum.ru/cgi-bin/latex.cgi?u \bar{BA} +v\bar{CD}=\bar{BD}
Для нахождения u и v нужно решить линейную систему 2 на 2:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\left( \left.\begin{matrix}x_1-x_2 & x_4-x_3\\ y_1-y_2 & y_4-y_3 \end{matrix}\right|\begin{matrix}x_4-x_2\\ y_4-y_2\end{matrix}\right)
Третьи координаты не используются, так как мы уже проверили, что прямые АВ и СD пересекаются. Можно представить себе это так, что мы проектируем данные два отрезка на плоскость XOY и находим точку пересечение этих проекций, в которую проектируется точка пресечения самих отрезков.
Решение системы: https://www.cyberforum.ru/cgi-bin/latex.cgi?\left(u;v \right)=\left(\frac{\begin{vmatrix}x_4-x_2 & x_4-x_3\\ y_4-y_2 & y_4-y_3\end{vmatrix}}{\begin{vmatrix}x_1-x_2 & x_4-x_3\\ y_1-y_2 & y_4-y_3\end{vmatrix}};\: \frac{\begin{vmatrix}x_1-x_2 & x_4-x_2\\ y_1-y_2 & y_4-y_2\end{vmatrix}}{\begin{vmatrix}x_1-x_2 & x_4-x_3\\ y_1-y_2 & y_4-y_3\end{vmatrix}} \right)
Если знаменатель каждой дроби (он один и тот же) равен 0, от вывод: отрезки параллельны, т.е. не пересекаются.
Оба эти числа u,v должны быть от 0 до 1.
Если u не в пределах от 0 до 1, а v в пределах, это означает, что отрезок CD пересекается с ПРОДОЛЖЕНИЕМ отрезка АВ. Точно так же, если значение v не от 0 до 1, то пересекается не сам отрезок CD, а его продолжение.
3. Искомая точка пересечения https://www.cyberforum.ru/cgi-bin/latex.cgi?X\left(u\left(x_1-x_2 \right)+x_2 ; \: u\left(y_1-y_2 \right)+y_2; \: u\left(z_1-z_2 \right)+z_2\right)
Размещено в Без категории
Просмотров 972 Комментарии 0
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.