CUDAの2つの三角形間の角度を計算します
-
22-09-2019 - |
質問
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つの非平行線のクロス製品を取得することです。 (ex(p3-p1) バツ (P2-P1)および(P4-P1) バツ (P2-P1)。
それらを正規化します。
これらの2方向ベクトルのドット積は、角度のコサインを提供します。
トリッキーなビットは、縮退した三角形に注意することです!いずれかの三角形を定義する3つのポイントすべてが共生的である場合(その三角形は単なる線です)、あなたが求めているものは未定義であり、クロスプロダクトはゼロで分割されます。その場合、何をするかを決める必要があります。
GPUでこれをやろうとしているので、効率性を心配している場合は、枝なしでこの関数を書きたいと思うでしょう。つまり、縮退した三角形をテストする代わりに if
句、あなたは三元でそれを試してみるべきです A ? B : C
他のヒント
三角形間の角度は、各三角形の3つのポイントで定義される平面間の角度と同じです。
ポイント1またはポイント2の両方が両方の平面にあるため、それらのポイントの1つからポイント3への方向コサインを見つけてから、ポイント4に把握します。次に、これら2つの線の間の角度のコサインは製品の合計です。対応する方向のコサインの。
所属していません StackOverflow