複雑な行列変換を一連の単純な変換に分解しますか?
-
19-09-2019 - |
質問
任意の M3 行列変換を一連の単純な変換 (移動、拡大縮小、傾斜、回転など) として再表現できるかどうか (また、可能であればどのようにすればよいか) 疑問に思います。
言い換えると:次の方程式が成り立つように、MComplex から MTranslate、MScale、MRotate、MSkew 行列を計算する方法:
MComplex = MTranslate * MScale * MRotate * MSkew (または他の順序)
解決
特異値分解 (こちらも参照 このブログ この PDF)。任意の行列を 3 つの行列の組み合わせに変換します。直交+対角+直交。直交行列は回転行列です。対角行列は、主軸に沿った歪み = スケーリングを表します。
変換によってゲームにモンキー レンチが投入されますが、やるべきことは行列の変換部分を取り出して 3x3 の行列を作成し、その行列に対して SVD を実行して回転と傾斜を与え、その後変換部分を元に戻すことです。 。そうすれば、4 つの行列の回転 + スケール + 回転 + 移動の構成が得られます。おそらく 3 つの行列 (回転 + 一連の軸に沿ったスケーリング + 移動) でこれを行うことは可能ですが、正確な方法はわかりません...おそらく QR 分解 (Q = 直交 = 回転ですが、R がスキューのみなのか回転部分があるのかはわかりません)。
他のヒント
はい、しかし、解決策は一意ではありません。また、あなたは、むしろ
(残りの順序は重要ではありません)最後に翻訳を置く必要があります任意の所与の正方行列A
について無限に多くの行列B
とC
そのA = B*C
ように存在します。任意の正則行列のB
を選択(B)は^ -1が存在するか、DET(Bことを意味する!= 0)、現在C = B^-1*A
。
あなたのソリューションは、最初のいくつかの可逆転置行列であることをMTを選択し、MC
とMT
にMS*MR*MSk*I
を分解するためのようにします。 MSは、任意のスケーリング行列となるように、そして、MS
とMR*MSk*I
に残りを分解する。そしてそうで...
I
の終わりに(他の場所で対角線上の1、0の)単位行列である場合は、今、あなたは良いです。そうでない場合は、;-)やり直すが、異なる行列を選択してください。
実際には、上記の方法を使用すると、象徴、あなたはあなたにこれらの行列のすべてのためのパラメータ化の式が得られる方程式のセットを作成することができます。
どのように便利なこれらの分解がうまく、あなたのためになる - それはまた別の話だ。
。 あなたがのMathematicaのまたはのマキシマのにこれを入力すると、彼らは時間がないあなたのためにこれを計算します。