0

ベクトル形状の変換デモを書いていますが、行き詰まっています:

いくつかの形状から得られた変換行列データがあります:

matrix = [3.23891, -0.87126, 246.73324, 1.07431, 0.86589, 169.21047, 0, 0, 1]

次に、decomposeMatrixメソッド (ここから来ます: https://frederic-wang.fr/decomposition-of-2d-transform-matrices.htmltranslation ) を使用して、行列を, scale,rotationに分割します。skewこれらの値を新しいshapeクラスに記録します。 、キャンバスを更新すると、このshapeインスタンスは、これらのポーズ値を介してローカル マトリックスを計算するメソッドを呼び出します。前に分解されたマトリックスとほぼ同じマトリックスを返すと思っていましたが、そうではありませんでした。

マトリックスからデータを取得しました:

rotation: 0.32026899072894127
scale: {x: 3.412432386032404, y: 1.0961547154147515}
skew: {x: -0.16104628632010806, y: 0}
translation: {x: 246.73324584960938, y: 169.21047973632812}

これらのデータを "https://frederic-wang.fr/decomposition-of-2d-transform-matrices.html" Web ページと比較しましたが、それらは同じであり、Web ページのデモは期待どおりの正しい画像ポーズ結果を得ることができます。

それで、私の行列乗算方法が間違っていたのではないかと思いましたか?

行列の連結順序は次のとおりです。

Local = Translate * Rotate * Skew * Scale

そして、 などの他の連結順序を試しT * R * Sc * Skましたが、それでも正しい結果が得られません。

親愛なる家族、この問題を解決するのを手伝ってくれませんか? 比心!

4

1 に答える 1

0

ありがとう家族!解決します!スキュー変換が間違っていたので、順序は Translate * Rotate * Scale * Skew である必要があります

于 2021-04-30T00:38:49.143 に答える