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

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

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

Дано: отрезки АВ и С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)
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru