2016-06-29 6 views
2

私は4x4変換行列を持っています。しかし、変換を試みた後、Y軸の回転の回転が逆の方向に向いていることに気付きました。残りは正しい。変換行列の1軸だけを反転する方法は?

私は他のAPIからこの行列を得ましたので、おそらく座標系の違いです。では、変換行列の軸をどのように反転できますか?

翻訳のみの場合は、Y変換でマイナス記号を追加できますが、すべてのローテーションが同じ3x3領域に表示されているため、1つの軸の逆回転についてはわかりません。私は翻訳と回転の両方に同時に影響する何らかの方法があるかもしれないと思った。 (実際に軸を反転させる)

答えて

4

編集:あなたが探している操作は、ZアップまたはYアップを維持しながら座標系を変更することです。この場合、行列の2番目の列(または行)のすべての要素を逆に設定してみてください。


この質問は数学的なスタックエクスチェンジの方がよいでしょう。まず、a really helpful read on rotation matrices

最初の問題はローテーションオーダーの問題です。私はXYZ回転順序を仮定しています。各軸であるため、以下のように我々は、回転行列を知っている:同じ回転順に由来するマトリックスを考える

Rotation matrices for each XYZ axis component

は、アルファはXの角度であり、次のように得られた行列は次のようになり、ベータがY

Completed rotation matrix for XYZ rotation order

あなたはこの行列からの各軸の角度の個々の成分を導出することができる:角度、およびγはZ角です。たとえば、逆角度を使ってYの角度を-sin(beta)から派生させることができます。ベータを指定すると、cos(beta)sin(alpha)からアルファを派生させることができます。 cos(beta)sin(gamma)からガンマを導出することもできます。マトリックスの同じ番号は複数の値を表すことができます(例:sin(0)=0およびsin(180)=0)。

アルファ、ベータ、およびガンマを知ったので、ベータ版を元に戻して回転行列を作り直すことができます。

クォータニオンを使ってこれを行うより良い方法があるかもしれませんが、Math StackExchangeにこれらの種類の言語に依存しない質問をする必要があります。

4

非常に短い答え:フレームの向きに注意が払われていないと、パイプラインの下にある多くのものが悪い髪の日になる可能性があります。その理由は、「フレーム・オリエンテーション」、すなわち「right-handedness」(またはまれに左利き)の「パリティ」である。通常一緒に働くほとんどの3Dジオメトリツールとライブラリは、プレイ中のすべての座標系が右利き(または少なくとも一貫して手渡されている)であることを暗黙のうちに仮定しています。座標系内の1つの軸の向きを反転すると、向きが右から左に変わるか、または逆になります。あなたのAPIから取得したフレームが右利きであること

  • チェック:

    だから、物事のための提案はあなたの問題で&試して確認してください。を4x4変換行列の3x3回転部分の行列式を計算することによって計算します。+1またはそれに非常に近い値でなければなりません。

  • -1の場合は、その軸、つまり3x3回転の列の1つの符号を変更すると1を反転します。

  • 慎重に注意:Q * xとしてxを乗算することによって変換Qを適用すると仮定したので、私は「列」と言いました。xは4x1の列ベクトルで、最後の要素は1です。左にQを乗じた行ベクトルを使用する場合は、行を反転する必要があります。

  • もしその行列式が+1ならば、あなたはどこかにバグがあります。

関連する問題