Вопрос

Я хотел рассчитать угол между двумя треугольниками в трехмерном пространстве. Два треугольника всегда будут делиться ровно двумя точками. например

Треугольник 1:

Point1 (x1, y1, z1),  
Point2 (x2, y2, z2),   
Point3 (x3, y3, z3).  

Треугольник 2:

Point1 (x1, y1, z1),  
Point2 (x2, y2, z2),  
Point4 (x4, y4, z4).

Есть ли способ эффективно рассчитать угол между ними в CUDA?

Это было полезно?

Решение

Для каждой плоскости необходимо построить его нормальный вектор (перпендикулярно всем линиям в этой плоскости). Простой способ сделать это состоит в том, чтобы взять поперечный продукт двух непараллельных линий в треугольнике. (Ex (P3-P1) Икс (P2-P1) и (P4-P1) Икс (P2-P1).

Нормализовать их.

Точечный продукт этих двух векторов направления дает вам косинус угла.

Хитрое - следить за дегенерированными треугольниками! Если все 3 точки, определяющие любой треугольник, являются колинеарными (этот треугольник-это просто линия), то то, о чем вы просите, не определено, а перекрестный продукт будет делиться на ноль. Вы должны решить, что вы собираетесь делать в этом случае.

Поскольку вы пытаетесь сделать это на графическом процессоре, вы в идеале захотите написать эту функцию без каких -либо ветвей, если вы обеспокоены эффективностью. Это означало бы вместо тестирования на вырожденные треугольники с if пункт, вы должны попытаться сделать это с тройным A ? B : C

Другие советы

Угол между треугольниками такой же, как и угол между плоскостями, определенными тремя точками каждого треугольника.

Поскольку обе точки 1 или точка 2 лежат в обеих плоскостях, выясните направление косинусов из одной из этих точек до точки 3, а затем в точке 4. Затем косинус угла между этими двумя линиями - это только сумма продуктов соответствующего направления косинусов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top