1

上方向が単位ベクトルuによって定義されるモデルから読み取られる 3D 頂点があります。これらすべての頂点ポイントを、上方向が単位ベクトルvによって定義される別の空間に変換する必要があります。

元の上方向が (0,1,0) でターゲットが (1,0,0) の場合、すべてのポイントに対して次のような回転行列を使用できることがわかっています。

x' = x*cos(-90) - y*sin(-90) = y
y' = x*sin(-90) + y*cos(-90) = -x
z' = z

where -90 is the angle from (0,1,0) to (1,0,0).

...しかし、これまでのところ、最初に述べたケースに対してこのアプローチを一般化するための私の試みは無駄であることが証明されています.

これを解決する方法はありますか?

4

2 に答える 2

0

これを一般化するために、回転角が θ = cos -1 ( u ∙<b>v / | u || v |) で与えられ、軸がr = ( u /| u |)×( v /| v |) ここで、∙ は内積、× は外積、|です。| | はユークリッド (L2) ノルムです。四元数定式化または回転行列を使用して、実際に線形変換を生成できます。

これが機能する理由: 2 つの単位長ベクトルの内積は、これら 2 つのベクトル間の角度のコサインです。2 つの単位長の 3D ベクトルの外積は、他の 2 つに直交する (垂直な) 2 つの単位長の 3D ベクトルの 1 つです。2 つのベクトルは、u × v = - v × uのように符号のみが異なるため、外積の順序を間違えると、上記の定式化で符号の問題が発生する可能性があります。

于 2013-08-20T18:47:48.787 に答える