5

いくつかの法線があり、それらが属する面間の角度を計算する必要があります。私が抱えている問題は、角度が180より大きいときに面間の角度を見つけることです。つまり、45の角度と315の角度の違いを見分ける方法がわかりません。

edit2:モデルを定義するobjファイルにアクセスできますが、45'と315'を区別するためにどのような情報が必要ですか?また、使用する(低ポリ)モデルを構築しているので、交差する面などがないことを保証できます。

編集:

ang = math.acos(dotproduct(v1, v2) / (length(v1) * length(v2)))

ang = math.degrees(ang)

ang = 360 - (ang + 180)
4

1 に答える 1

8

法線が単位長であることを確認します(必要に応じて長さで割ります)。次に、内積を見つけます。

dp = n1.x * n2.x + n1.y * n2.y + n1.z * n2.z

これにより、[-1から1]の値が得られます。
dpが負の場合、角度は90度より大きくなります。

角度を見つけるには、アークコサインを使用します。

θ=acos(dp);

それはあなたにラジアンでの価値を与えるでしょう。度に変換するには、180/piを掛けます。


編集:面がポリゴンとして定義されていると仮定します。面が同一平面上にない場合、他のポリゴンと同一平面上にない各面のポリゴン定義に1つのポイントが存在する必要があります。2つの三角形について考えてみます。1つのエッジが接続されている場合、それらは2つの頂点を共有しますが、それぞれに1つの非共有頂点があります。これらをそれぞれ法線n1n2に関連付けられたv1v2と呼びます。v1からv2へのベクトルを見つけます:

m = v2-v1

mn1の間の角度が90[ dotP(m、n1)<0 ]より大きい場合、ポリゴンは互いに反対向きになります。角度が90未満の場合、ポリゴンは互いに向き合っています。角度が90度の場合、ポリゴンは同一平面上にあると思います(または、選択した点の1つが平面交差線上にあるか、私の考えではケースを見逃しています)。

于 2011-03-18T17:05:08.923 に答える