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

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

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

Author24 — интернет-сервис помощи студентам
Вот например 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.10.2014, 20:12
Ответы с готовыми решениями:

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

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

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

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

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

Решение

Может в опЕнгле или директиксе каком-нибудь есть, хотя не факт. Можно попробовать самому написать. 3 точки не лежащие на одной прямой (а треугольник это подразумевает) однозначно задают плоскость. 2 плоскости либо параллельны, либо пересекаются по прямой, уравнение которой можно получить из уравнений плоскостей. Эта прямая лежит в плоскостях каждого треугольника, можно проверить, пересекает ли она его - если пересекает хотя бы одну из сторон. Если она пересекает оба треугольника, то они пересекаются. Предварительно можно перейти в другую систему координат через сдвиг+поворот, но навскидку особого облегчения расчетов при этом не получится.
0
23 / 23 / 6
Регистрация: 23.03.2013
Сообщений: 245
19.10.2014, 22:32  [ТС] 3
Просто думаю где-нибудь должны использоваться такие функции) гуглил так и не нашел готовой))
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
19.10.2014, 22:33 4
А вот я не думаю, что она еще кому-нибудь нужна. Поэтому чем искать "такой же, но с перламутровыми пуговицами", проще написать свою.
0
Эксперт по математике/физикеЭксперт С++
2048 / 1366 / 395
Регистрация: 16.05.2013
Сообщений: 3,506
Записей в блоге: 6
23.10.2014, 08:31 5
Определить просто. Берете первый треугольник и ищете скалярное произведение векторов проведенных от любой точки первого треугольника к вершинам второго на нормаль к первому треугольнику. Если все произведения имеют один знак значит треугольники не пересекаются. Если для одной вершины знак будет противоположен проделываем ту же операцию, но теперь меняем треугольники местами. Если произведения имеют разные знаки треугольники пересекаются. Если же одного знака - не пересекаются.
0
191 / 90 / 33
Регистрация: 04.11.2013
Сообщений: 474
Записей в блоге: 4
23.10.2014, 08:49 6
В boost возможно есть или в CryEngine / unreal engine.
0
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
14.12.2014, 06:08 7
Цитата Сообщение от _Ivana Посмотреть сообщение
Может в опЕнгле или директиксе каком-нибудь есть, хотя не факт. Можно попробовать самому написать. 3 точки не лежащие на одной прямой (а треугольник это подразумевает) однозначно задают плоскость. 2 плоскости либо параллельны, либо пересекаются по прямой, уравнение которой можно получить из уравнений плоскостей. Эта прямая лежит в плоскостях каждого треугольника, можно проверить, пересекает ли она его - если пересекает хотя бы одну из сторон. Если она пересекает оба треугольника, то они пересекаются. Предварительно можно перейти в другую систему координат через сдвиг+поворот, но навскидку особого облегчения расчетов при этом не получится.
Цитата Сообщение от Ilot Посмотреть сообщение
Определить просто. Берете первый треугольник и ищете скалярное произведение векторов проведенных от любой точки первого треугольника к вершинам второго на нормаль к первому треугольнику. Если все произведения имеют один знак значит треугольники не пересекаются. Если для одной вершины знак будет противоположен проделываем ту же операцию, но теперь меняем треугольники местами. Если произведения имеют разные знаки треугольники пересекаются. Если же одного знака - не пересекаются.
По этим гипотезам непересекающиеся треугольники
{ (0,0,-1), (0,0,1), (-1,0,0) } и
{ (1,-1,0), (1,1,0), (2,0,0) }
пересекаются.
На самом деле к гипотезе _Ivana нужно добавить, чтобы отрезки, по которым прямая пересечения плоскостей пересекает треугольники, имели бы больше одной общей точки.
0
14.12.2014, 06:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2014, 06:08
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru