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

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

Запись от jogano размещена 31.12.2014 в 07:47
Показов 4612 Комментарии 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
Комментарии
 
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru