3D空間で2つの三角形の間の角度を計算したかったのです。2つの三角形は、常に正確に2つのポイントを共有します。例えば
三角形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でそれらの間の角度を効率的に計算する方法はありますか?
3D空間で2つの三角形の間の角度を計算したかったのです。2つの三角形は、常に正確に2つのポイントを共有します。例えば
三角形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でそれらの間の角度を効率的に計算する方法はありますか?
平面ごとに、法線ベクトル (その平面のすべての線に垂直) を作成する必要があります。これを行う簡単な方法は、三角形の 2 つの非平行線の外積を取ることです。(例 (P3-P1) X (P2-P1) および (P4-P1) X (P2-P1))。
それらを正規化します。
これらの 2 つの方向ベクトルの内積は、角度の余弦を与えます。
注意が必要なのは、縮退した三角形に注意することです! いずれかの三角形を定義する 3 点すべてが同一線上にある場合 (その三角形は単なる線です)、求めているものは定義されておらず、外積はゼロで除算されます。その場合にどうするかを決める必要があります。
これを GPU で実行しようとしているので、効率が気になる場合は、理想的には分岐なしでこの関数を作成することをお勧めします。つまり、if句で縮退した三角形をテストする代わりに、三項で試してみるべきですA ? B : C
三角形の間の角度は、各三角形の 3 つの点によって定義される平面の間の角度と同じです。
点 1 と点 2 の両方が両方の平面にあるため、これらの点の 1 つから点 3、そして点 4 への方向余弦を計算します。次に、これらの 2 つの線の間の角度の余弦は、積の和です。対応する方向余弦の