Canvas (すべて 2D) での移動、スケーリング、および回転を管理するために、WPF の MatrixTransform を使用しています。それはうまくいきます。ただし、現在の回転角度を計算できるようにしたいと考えています。これはどのように行われますか?マトリックスを反転してから、それを使用して何かを回転させる必要がありますか? 必要に応じて、「回転位置」ポイントを提供できます。
質問する
1821 次
1 に答える
1
仮定:
- マトリックスは、間違いなく平行移動/回転/スケール マトリックスです (スキューやその他の非直交性はありません)。
- マトリックスは、スケールが最初に適用され、次に回転、次に平行移動が続くように指定されます。
手順:
スケールと回転を含む左上の 3x3 マトリックスを与える最終的な平行移動コンポーネントを無視できます。
スケーリングは、スケーリング係数の対角行列 (行列内の各列のスケーリング) による単純な乗算であるため、列ベクトルを正規化して、純粋に回転を表す正規直交行列を得ることができます。
回転角度を取得するには、回転軸または回転するベクトルを選択する必要があります (そこから回転軸と角度を計算できます)。
後者のケースはより簡単です:
- マグニチュード 1 のサンプル ベクトル v を取得します (数学を簡略化します)。
- 回転行列で変換して v' を取得します。
- 回転軸 (vx v') の場合、それらの間の角度は acos(v * v') として定義されます。「x」は外積、「*」は内積です。
于 2012-10-10T18:40:37.063 に答える