6

この質問の結果として、 QtのQTransform::rotate機能についてもっと理解したいと思います。ドキュメントには、次のように書かれています。

QTransform&QTransform :: rotate(qreal angle、Qt :: Axis axis = Qt :: ZAxis)

座標系を指定された軸を中心に指定された角度だけ反時計回りに回転し、マトリックスへの参照を返します。

ウィジェット座標で定義されたポイントにQTransformを適用すると、y軸が下向きになるため、回転の方向は時計回りになることに注意してください。

角度は度で指定されます。

前の質問から、時計回りに回転するには、関数QPolygonFに従って実際に反時計回りに90度回転する必要があることを学びました。rotate

QPolygonF original = QPolygonF() << QPoint(0, 1) << QPoint(4, 1) << QPoint(4, 2) << QPoint(0, 2);
QTransform transform = QTransform().translate(2, 2).rotate(90).translate(-2, -2);
QPolygonF rotated = transform.map(original);
qDebug() << rotated;

出力:

QPolygonF(QPointF(3, 0) QPointF(3, 4) QPointF(2, 4) QPointF(2, 0) ) 

たとえば、この長方形の場合:

元の長方形の回転

ここまで回転するには:

新しい長方形の回転

どうしてこれなの?QTransform::rotate私が「ウィジェット座標」にいないと信じているのに、なぜ私の呼び出しが実際に時計回りの回転を引き起こしているとドキュメントに記載されているのですか?ここにはウィジェットは含まれていません。

4

2 に答える 2

8

QTransform は、数学的なデカルト座標系で動作します。すなわち。右上の象限は正の x および正の y 象限 (象限 1) です。あなたのチャートは、右下の第 1 象限の y 軸反転ウィジェット座標にあります。

Rotate は反時計回りに回転します。ただし、ウィジェット座標ではY軸が反転しているため、時計回りになります。

あなたが言ったように、ポリゴンはウィジェットとは何の関係もありません。反時計回りに回転しますが、ウィジェット座標で視覚化しています。

于 2012-04-17T15:00:17.817 に答える
3

実際、問題は、問題の関数がオブジェクトではなく座標系を回転させることだと思います。オブジェクトを時計回りに回転させたい場合、それは座標系を反時計回りに回転させることと同じです。

于 2012-10-16T19:58:56.460 に答える