9

QTransform オブジェクトがあり、オブジェクトが回転する角度を知りたいのですが、これを行う方法の明確な例はありません:

http://doc.trolltech.com/4.4/qtransform.html#basic-matrix-operations

設定するのは簡単ですが、元に戻すのは難しいです。

4

5 に答える 5

9

最も簡単な一般的な方法は、(0,0)と(1,0)を変換してから、三角関数(arctan)を使用して角度を取得することです。

于 2009-05-21T14:54:25.750 に答える
9

変換に回転のみが含まれていると仮定すると、簡単です。m11要素のacosを取得するだけです。

変換に平行移動が含まれている場合でも機能しますが、せん断またはスケーリングが含まれている場合は運が悪いです。これらは、マトリックスをせん断、スケール、および回転マトリックスに分解することで再構築できますが、得られる結果は、探しているものではない可能性があります。

于 2009-05-21T14:54:36.933 に答える
4

変換行列は、3Dグラフィックスに使用される実装です。ポイント/オブジェクトの3D位置/回転方向を高速化するために、計算が簡略化されます。連続する平行移動/回転/スケールを蓄積する方法のため、変換から方向を引き出すことは実際には非常に困難です。

ここに提案があります。(1,0,0)のような単純な方向を指すベクトルを取り、それに変換を適用します。結果のベクトルは、次のようなものになるように変換および回転されます:(27.8、19.2、77.4)。変換を(0,0,0)に適用して、(26.1、19.4、50.8)のようなものを取得します。これらの2つのポイントを使用して、開始ポイント(1,0,0)を知っていることに基づいて、適用された回転を計算できます。

これは役に立ちますか?

于 2009-05-21T14:56:08.787 に答える
2

通常、逆三角関数が必要ですが、象限のあいまいさに注意する必要があります。これは、atan2 (arctan2 と綴られることもあります) を使用する必要があるものです。したがって、単位ベクトル [0, 1] を [x, y] に回転してから atan2(y,x) を使用するか、行列が回転のみを実装している場合は、atan2(m12,m11) を使用できます。(これらは、atan2 を使用しないことを除いて、Javier と Nils の回答に似ています。)

于 2009-05-21T15:30:20.887 に答える