2010-01-26 3 views
0

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

Треугольник 1:
Point1 (x1, y1, z1),
Point2 (x2, y2, z2),
Point3 (х3, у3, г3).

Треугольник 2:
Point1 (x1, y1, z1),
Point2 (x2, y2, z2),
Point4 (x4, y4, z4).

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

+0

Я боюсь, вам придется определить * «степень между ними» * для меня - do вы имеете в виду угол между их соответствующими плоскостями? –

+0

Да, между соответствующими самолетами –

+0

О, извините, я пропустил, что каждый треугольник делится * двумя * точками, кажется довольно очевидным сейчас ... –

ответ

3

Для каждой плоскости вам нужно построить нормальный вектор (перпендикулярно всем линиям в этой плоскости). Простым способом сделать это является перекрестное произведение двух непараллельных линий в треугольнике. (Например, (Р3-Р1) Х (Р2-Р1) и (Р4-Р1) Х (Р2-Р1).

Нормализация тех.

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

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

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

1

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

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

+0

спасибо, я знаю, что никаких проблем с реализацией в ansi-c. но как насчет ядра cuda? –

+0

Этого я не знаю. – John

+0

спасибо в любом случае! :) –

Смежные вопросы