質問

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つの線の間の角度のコサインは製品の合計です。対応する方向のコサインの。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top