Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
23 / 23 / 6
Регистрация: 23.03.2013
Сообщений: 245

Пересечение треугольников в 3d

19.10.2014, 20:12. Показов 4428. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот например 2 треугольника: (для примера)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
struct Point
{
   int X;
   int Y;
   int Z;
};
 
struct Triangle
{
   Point p1;
   Point p2;
   Point p3;
};
...
 
//First triangle
Point p1;
p1.X = 0;
p1.Y = 0;
p1.Z = 0;
Point p2;
p2.X = 0;
p2.Y = 0;
p2.Z = 10;
Point p3 ;
p3.X = 10;
p3.Y = 0;
p3.Z = 0;
Triangle t1 ;
t1.p1 = p1;
t1.p2 = p2;
t1.p3 = p3;
...
//Second Triangle
Point p1;
p1.X = 5;
p1.Y = 5;
p1.Z = 5;
Point p2;
p2.X = 5;
p2.Y = -5;
p2.Z = 5;
Point p3;
p3.X = 5;
p3.Y = 0;
p3.Z = 10;
Triangle t2;
t2.p1 = p1;
t2.p2 = p2;
t2.p3 = p3;



Как определить пересекаются они или нет.

Есть ли готовая функция для этого? (не важно c++ или c#)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.10.2014, 20:12
Ответы с готовыми решениями:

Пересечение треугольников
Здравствуйте! Подскажите, пожалуйста, как узнать пересекается треугольник или нет с другими треугольниками. Вот данные: struct...

Пересечение треугольников
Здравствуйте, задумался над такой задачей: Проверить пересекаются ли 2 треугольника. 6 координат задаются пользователем (именно с...

Пересечение треугольников
Надо определить, пересекаютя ли треугольники. Наличие общей грани нельзя считать пересечением, но если один треугольник лежит внутри...

6
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
19.10.2014, 21:37
Лучший ответ Сообщение было отмечено karaulov6 как решение

Решение

Может в опЕнгле или директиксе каком-нибудь есть, хотя не факт. Можно попробовать самому написать. 3 точки не лежащие на одной прямой (а треугольник это подразумевает) однозначно задают плоскость. 2 плоскости либо параллельны, либо пересекаются по прямой, уравнение которой можно получить из уравнений плоскостей. Эта прямая лежит в плоскостях каждого треугольника, можно проверить, пересекает ли она его - если пересекает хотя бы одну из сторон. Если она пересекает оба треугольника, то они пересекаются. Предварительно можно перейти в другую систему координат через сдвиг+поворот, но навскидку особого облегчения расчетов при этом не получится.
0
23 / 23 / 6
Регистрация: 23.03.2013
Сообщений: 245
19.10.2014, 22:32  [ТС]
Просто думаю где-нибудь должны использоваться такие функции) гуглил так и не нашел готовой))
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
19.10.2014, 22:33
А вот я не думаю, что она еще кому-нибудь нужна. Поэтому чем искать "такой же, но с перламутровыми пуговицами", проще написать свою.
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2222 / 1424 / 419
Регистрация: 16.05.2013
Сообщений: 3,640
Записей в блоге: 6
23.10.2014, 08:31
Определить просто. Берете первый треугольник и ищете скалярное произведение векторов проведенных от любой точки первого треугольника к вершинам второго на нормаль к первому треугольнику. Если все произведения имеют один знак значит треугольники не пересекаются. Если для одной вершины знак будет противоположен проделываем ту же операцию, но теперь меняем треугольники местами. Если произведения имеют разные знаки треугольники пересекаются. Если же одного знака - не пересекаются.
0
 Аватар для Alexandr_1982
191 / 90 / 33
Регистрация: 04.11.2013
Сообщений: 473
Записей в блоге: 4
23.10.2014, 08:49
В boost возможно есть или в CryEngine / unreal engine.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
14.12.2014, 06:08
Цитата Сообщение от _Ivana Посмотреть сообщение
Может в опЕнгле или директиксе каком-нибудь есть, хотя не факт. Можно попробовать самому написать. 3 точки не лежащие на одной прямой (а треугольник это подразумевает) однозначно задают плоскость. 2 плоскости либо параллельны, либо пересекаются по прямой, уравнение которой можно получить из уравнений плоскостей. Эта прямая лежит в плоскостях каждого треугольника, можно проверить, пересекает ли она его - если пересекает хотя бы одну из сторон. Если она пересекает оба треугольника, то они пересекаются. Предварительно можно перейти в другую систему координат через сдвиг+поворот, но навскидку особого облегчения расчетов при этом не получится.
Цитата Сообщение от Ilot Посмотреть сообщение
Определить просто. Берете первый треугольник и ищете скалярное произведение векторов проведенных от любой точки первого треугольника к вершинам второго на нормаль к первому треугольнику. Если все произведения имеют один знак значит треугольники не пересекаются. Если для одной вершины знак будет противоположен проделываем ту же операцию, но теперь меняем треугольники местами. Если произведения имеют разные знаки треугольники пересекаются. Если же одного знака - не пересекаются.
По этим гипотезам непересекающиеся треугольники
{ (0,0,-1), (0,0,1), (-1,0,0) } и
{ (1,-1,0), (1,1,0), (2,0,0) }
пересекаются.
На самом деле к гипотезе _Ivana нужно добавить, чтобы отрезки, по которым прямая пересечения плоскостей пересекает треугольники, имели бы больше одной общей точки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.12.2014, 06:08
Помогаю со студенческими работами здесь

Определить пересечение треугольников
Помогите определить пересечение треугольников уже неделю сижу class Point { public: float x, y; Point(float _x = 0, float _y =...

Как определить пересечение 2-х треугольников в трехмерном пространстве?
Собсно сабж) Какие есть идеи?

Пересечение двух треугольников
Здравствуйте. Помогите пожалуйста с решением задачи, а конкретнее: Есть два треугольника(один треугольник движется на встречу другому...

Пересечение двух треугольников
я не совсем понимаю, ТуТ можно выложить, вроде как, выполненное задание по начертательной геометрии в программе КОМПАС, задание -...

Пересечение двух треугольников
Всем доброго времени суток! Понимаю, что подобные темы на форуме вроде были, но дело вот в чем: даны координаты двух треугольников...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru