5

ベクトル (V) を渡すときに、回転行列 (M) を作成しようとしていますM * [0, 0, 1] (forward) = V

これを行っているのは、この行列を使用して他のベクトルを乗算してローカル空間に配置したいからです (それが正しい用語かどうかはわかりませんが、理解していただければ幸いです)。

V = [0, 1, 0]
M = ?
Result = M * V = [0, 0, -1]

では、[0,0,1]上に 90 度ピッチングして[0,1,0]、M を掛けた後に になるとしたら、何Mですか?

4

4 に答える 4

5

3 次元の回転は考えるのが難しく、文章で説明するのはさらに難しいです。ただし、左手を一連の 3 次元の軸に近いものにすることは可能です。フレミングの左手の法則について説明している次のウィキペディアのページを見てください。特に、IB、およびFとラベル付けされた指を持つ 2 番目の図を見てください: http://en.wikipedia.org/wiki/Fleming's_left-hand_rule_for_motors

自分の手で同じフォーメーションを作成し、指に IB、およびFというラベルを付ける代わりに、それらをxy、およびzと呼びましょう。さらに、これら 3 本の指が手のひらで交わる点を原点 (0 0 0) とし、原点からこれらの指/親指の 1 つの先端に向かって移動すると、正の方向。

ベクトルv = (0 1 0) は、人差し指 (これをyと呼びます) に沿った点です。この点を回転させて、点 (0 0 -1) を形成します。この点はz軸 (親指) 上にありますが、負であるため、親指の先から原点に向かう方向で、原点の "下" に位置します。

したがって、点 (0 1 0) を (0 0 -1) に回転するには、x軸 (中指) を中心に回転させる必要があります。中指にコンパクト ディスクを置き、人差し指と親指で定義される平面 ( ( x , y ) 平面) に収まるように押し、ディスクの中心から 1 ユニットの位置に印を付けると想像してください。次に、そのマークを人差し指で合わせて、マークがポイント (0 1 0) に位置することを想像してください。中指で円盤を回転させて、マークがポイント (0 0 -1) にくるようにします。したがって、必要な回転はx軸を中心とした回転です。

次のウィキペディアのページには、 xy、およびz軸を中心とした 3 次元空間での回転の方程式が示されています。x軸を中心とした回転の行列は次のとおりです。

/1     0        0   \
|0   cos θ    -sin θ|
\0   sin θ     cos θ/

右手を使用してディスクを回転させる場合、行列は、θ の負の値が右手の時計回りの動きに対応するように定義されます (正の値の場合はその逆)。回転する必要がある角度は負の 4 分の 1 回転であり、必要なマトリックスは次のとおりです。

/1    0     0\
|0    0     1|
\0   -1     0/

角度は度またはラジアンで表現できることに注意してください。したがって、コードでより一般的な回転を実装する場合は、数学ライブラリが期待するものを確認する必要があります。

于 2013-03-26T23:22:02.883 に答える
1

したがって、ローカルのzV=(vx,vy,vz)とローカルのx軸が に向けて与えられますU=(ux,uy,uz)。ここで、UV単位ベクトルです。

ローカルy軸はW=Normalized(Cross(V,U))です。Uが正確に垂直でない場合はV、修正する必要がありますU=Normalized(Cross(W,V))

3×3 回転行列は

    | Ux  Wx  Vx |
M = | Uy  Wy  Vy |
    | Uz  Wz  Vz |

Cross(A,B) = (Ay*Bz-Az*By, Az*Bx-Ax*Bz, Ax*By-Ay*Bz)は外積演算子でありNormalized(A) = (Ax,Ay,Az)/SQRT(Ax*Ax+Ay*Ay+Az*Az)、単位ベクトルを作成することに注意してください。

于 2014-11-03T17:57:47.957 に答える
1

手でも簡単、楽々。調べるだけで、M は本質的に y 軸と z 軸を交換し、x だけを残すことがわかります。

この配列は仕事をします:

    [1  0  0]
M = [0  0  1]
    [0 -1  0]

M * [0, 1, 0] = [0, 0, -1]

このソリューションは、これら 2 つの特定のベクトルに同じ影響を与える一連の変換行列の中で一意ではないことに注意してください。実際、そのような行列は無数にあります。これが1つです:

     [sqrt(2)/2     0    sqrt(2)/2]
M2 = [sqrt(2/2)     0   -sqrt(2)/2]
     [0            -1         0   ]
于 2013-03-26T22:46:33.277 に答える