Определить пересекаются ли 2 треугольника в 3d - C#

Узнай цену своей работы

Формулировка задачи:

Вот например 2 треугольника: (для примера)
struct Point
{
   int X;
   int Y;
   int Z;
}
 
struct Triangle
{
   Point p1;
   Point p2;
   Point p3;
}
...
 
//First triangle
Point p1 = new Point();
p1.X = 0;
p1.Y = 0;
p1.Z = 0;
Point p2 = new Point();
p2.X = 0;
p2.Y = 0;
p2.Z = 10;
Point p3 = new Point();
p3.X = 10;
p3.Y = 0;
p3.Z = 0;
Triangle t1 = new Triangle();
t1.p1 = p1;
t1.p2 = p2;
t1.p3 = p3;
...
//Second Triangle
Point p1 = new Point();
p1.X = 5;
p1.Y = 5;
p1.Z = 5;
Point p2 = new Point();
p2.X = 5;
p2.Y = -5;
p2.Z = 5;
Point p3 = new Point();
p3.X = 5;
p3.Y = 0;
p3.Z = 10;
Triangle t2 = new Triangle();
t2.p1 = p1;
t2.p2 = p2;
t2.p3 = p3;
Как определить пересекаются они или нет. Есть ли готовая функция для этого? (не важно c++ или c#) И важно что бы места где вершины или стороны соединяются не считалось пересечением.

Решение задачи: «Определить пересекаются ли 2 треугольника в 3d»

textual
Листинг программы
//Плоскость, в которой лежит текущий треугольник
Plane pl = new Plane(V1, V2, V3);
//Сторона между первой и второй вершинами данного треугольника
Line l = new Line(tr.V1, tr.V2);
//Точка пересечения стороны и плоскости
Point3D? crosspt = pl.CrossPoint(l);
//Если сторона и плоскость пересекаются
if (crosspt != null)
    //Проверяем, чтобы точка находилась внутри треугольника
    if (IsPointInside(tr, crosspt.Value))
        return crosspt;

ИИ поможет Вам:


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

Оцени полезность:

13   голосов , оценка 3.692 из 5
Похожие ответы