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

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

Запись от jogano размещена 31.12.2014 в 07:47
Показов 4699 Комментарии 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
Комментарии
 
Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru