2012-04-17 52 views
1

this questionの結果として、QtのQTransform::rotate機能の詳細を知りたいと思います。 In the documentationは、それは言う:QtのQTransform回転機能の理解

QTransform & QTransform ::回転(QREAL角度、Qtの::軸の軸= Qtの:: Z軸)

は、指定された軸の周りに所定の角度だけ反時計回りの座標系を回転させ行列への参照を返します。

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

角度は度で指定します。私の前の質問から

、私はQPolygonF時計回りに回転させるように、私は実際にrotate機能に応じて、それを90度反時計回りに回転しなければならないことを学びました:

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)) 

例この長方形のために:

original rectangle rotation

ここに回転させるには:

new rectangle rotation

これはなぜでしょうか?私が「ウィジェットの座標」にないと信じているときに、QTransform::rotateへの私の呼び出しが時計回りの回転を引き起こしていると書類が言っているのはなぜですか?

答えて

5

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

回転が反時計回りに回転します。しかし、Y軸はウィジェットの座標にフリップされるため、時計回りになります。

前述のとおり、ポリゴンはウィジェットとは関係ありません。それはCCWを回転させますが、あなたはウィジェットの座標でそれを視覚化しています。

+0

スティーブンに感謝します。 – Mitch

3

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

関連する問題