1

Canvas (すべて 2D) での移動、スケーリング、および回転を管理するために、WPF の MatrixTransform を使用しています。それはうまくいきます。ただし、現在の回転角度を計算できるようにしたいと考えています。これはどのように行われますか?マトリックスを反転してから、それを使用して何かを回転させる必要がありますか? 必要に応じて、「回転位置」ポイントを提供できます。

4

1 に答える 1

1

仮定:

  1. マトリックスは、間違いなく平行移動/回転/スケール マトリックスです (スキューやその他の非直交性はありません)。
  2. マトリックスは、スケールが最初に適用され、次に回転、次に平行移動が続くように指定されます。

手順:

  1. スケールと回転を含む左上の 3x3 マトリックスを与える最終的な平行移動コンポーネントを無視できます。

  2. スケーリングは、スケーリング係数の対角行列 (行列内の各列のスケーリング) による単純な乗算であるため、列ベクトルを正規化して、純粋に回転を表す正規直交行列を得ることができます。

  3. 回転角度を取得するには、回転軸または回転するベクトルを選択する必要があります (そこから回転軸と角度を計算できます)。

後者のケースはより簡単です:

  1. マグニチュード 1 のサンプル ベクトル v を取得します (数学を簡略化します)。
  2. 回転行列で変換して v' を取得します。
  3. 回転軸 (vx v') の場合、それらの間の角度は acos(v * v') として定義されます。「x」は外積、「*」は内積です。
于 2012-10-10T18:40:37.063 に答える