| On this page | |
| Since | 20.0 |
m 行列がm = stretch * rigidとなるように、 rigid 行列と stretch 行列に極分解を実行します。
rigid は、 m に最も近い向きを表現した直交行列であり、 stretch は、追加のスケールとシアーで構成された正定値半行列です。
技術的な説明
Ken Shoemake氏とTom Duff氏が述べているように:
“極分解の欠点の一つは、シアーの明示的な表現がないことです。…シアーは、回転とストレッチで因数分解されます。”
K. Shoemake and T. Duff. Matrix Animation and Polar Decomposition. Proceedings of Graphics Interface '92, pp. 258- 264, 1992
極分解は、 m 行列に最も近い回転行列を返します。
m 行列にシアーが含まれている場合、そのシアーの一部は回転として、一部はストレッチとして解釈されます。
これは、様々なトランスフォームコンポーネントを置き換えながら行列を選択的に再構成することを目的として行列を分解する場合に重要になります。
この場合は、シアーを明示的に扱うtransform::Explodeの使用を検討してください。
Note
m 行列に反射が含まれている場合、 rigid 行列にも反射が含まれます。
入力 ¶
m:
Matrix3, Matrix4
分解する入力行列。
出力 ¶
rigid:
Matrix3, Matrix4
m 入力行列に最も近い向きを表現した直交回転行列。
stretch:
Matrix3
剛体回転行列が計算された後に残った追加のスケールとシアーのコンポーネントで構成されたストレッチ行列。
success:
Bool
分解が成功するとTrueを返します。 入力行列が特異行列だった場合、分解は失敗します。
| See also |