UPベクトルとDirectionベクトルを持つカメラの回転軸と回転角を求めなければなりません(どちらも互いに垂直です)。私は回転されたカメラのUPと方向ベクトルの初期と最後の位置を持っています。私は、カメラの回転の軸と角度を探したい。私は自分のプロジェクトにC#を使用しています。私はこの3Dローテーションを初めて利用しています。あなたがそれらを愚かにするなら、私の質問を許してください。最初と最後に回転した四元数から回転軸を取得する
uはあなたが vector cross product(U X F のS =)を行うことにより、サイドベクターSを得ることができ方向(前方)ベクター fおよびベクトルアップから
1
A
答えて
0
。 3つのベクトルはすべて直交しています。また、それぞれを正規化することによってそれらを正規直交にする必要があります。まとめると、これらのベクトルは正規直交基底を形成する。
これで2つの基準があります。最初のカメラ方向からのものと最終的なカメラ方向からのものです。両方の基底を回転行列として表すことができます。例えば
- 前方ベクトル
- アップベクトル
- 側ベクトル
、マトリックス:
回転行列は、単純に3行がそれぞれ3×3行列であります[[1 0 0]
[0 1 0]
[0 0 1]]
は、起動時に、その順方向ベクトル、上方向ベクトル、および側方ベクトルのポイントgを正のx軸、y軸、z軸に向かって移動させる。
algorithmを使用して、これらの2つの基準(M1とM2)を2つの単位四元数(Q1とQ2)に変換できるようになりました。
ここでは、カメラの初期および最終的なカメラ方向を表す2つの単位四元数があります。
q2 = qT * q1
q2 * q1^-1 = qT * (q1 * q1^-1) = qT
=> qT = q2 * q1^-1
単位クォータニオンの逆数がそのconjugateに等しいことを知っている:あなたは、今では、Q2にQ1を変換四元QTを見つけなければならない
q1^-1 = q1* iif ||q1|| = 1
qT = q2 * q1^-1 = q2 * q1*
左シングルステップがあります:extracting the axis and angle from quaternion q:
angle = 2 * acos(qw)
x = qx/sqrt(1-qw*qw)
y = qy/sqrt(1-qw*qw)
z = qz/sqrt(1-qw*qw)
角度は、もちろんラジアンで与えられます。 x、y、zを計算するときは、ゼロ除算に注意してください。このような状況は回転がない場合や非常に小さい場合に発生するため、εを非常に小さい角度(たとえば1/10度)に選択し、ベクトルを計算しない場合はangle>εの場合にテストする必要がありますその場合です。
関連する問題
- 1. 四元からOpenGLの回転に
- 2. 最初の回転後のSnapSVG回転の問題
- 3. 回転行列からy軸に関する回転を取得
- 4. 四元数から度(0〜360°)の回転から
- 5. グラフィックス(2D)回転:x軸を回転
- 6. 最後の2次元で5D配列を回転する
- 7. 方向ベクトルを四元数回転に変換する
- 8. オイラーZXZ回転から固定軸XYZ回転への変換
- 9. 回転行列から任意の回転軸を取り除く
- 10. 回転のための四元数演算?
- 11. JavaFX:軸を回転させずにオブジェクトを回転する
- 12. 3軸に沿った回転と、各軸の回転とを別々にするのはなぜですか?
- 13. ggpairs回転軸ラベル
- 14. OpenGL C++で回転軸を回転する方法は?
- 15. どのように制限する(クランプ)Y軸回転のための回転。回転ユニティ
- 16. キューブを時計回りにx軸回りに回転する
- 17. x軸でアニメーションを回転
- 18. パーティクルツリープロットのx軸を回転
- 19. 3次元テッセレーションのための四面体の回転
- 20. Pixi.jsで回転した後のY軸に沿ったスケーリング
- 21. 最短経路、最低回転アルゴリズム
- 22. クォータニオンを軸回転に分割する
- 23. 各軸の3D回転角度を取得する方法は?
- 24. OpenGLのz軸回りの回転
- 25. Unity - ジャイロスコープ - 1軸回りの回転
- 26. 世界軸に沿った回転
- 27. Jenkinsはテストランの最後に無限に回転します
- 28. 回転する四角形のタイムライン
- 29. 各サブプロットの回転軸テキスト
- 30. セカンダリ軸ラベルの回転テキスト
返信いただきありがとうございます。それは本当に私をたくさん助けました。行列を四元数に変換するアルゴリズムには小さな問題が1つあります。私のソフトウェアカメラは、1つよりも少ない行列のトレースを与えているいくつかのアップベクトルと方向ベクトルを生成します。回転行列のトレースが1より小さい場合、回転軸と角度の計算は奇妙な値を与えています。あなたはこの問題を解決する方法を知っていますか? – user1304687
238行目の関数を参照してください:http://java.net/projects/vecmath/sources/svn/content/trunk/src/javax/vecmath/AxisAngle4f.java?rev = 144 あなたの問題を解決する場合は、この回答を適宜チェックしてください。 – gsimard