2012-04-17 34 views
1

由於this question,我想了解更多關於Qt的QTransform::rotate函數。 In the documentation,它說:瞭解Qt的QTransform旋轉功能

QTransform & QTransform ::旋轉(QREAL角度,Qt的::軸軸線= Qt的:: Z軸)

由關於指定的軸線的給定角度逆時針旋轉的座標系和返回對矩陣的引用。

請注意,如果您將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)) 

Eg這個矩形:

original rectangle rotation

要旋轉到這裏:

new rectangle rotation

這是爲什麼?爲什麼該文檔說我調用QTransform::rotate實際上是在我相信我不在「小部件座標」中時導致順時針旋轉 - 這裏沒有涉及小部件。

回答

5

QTransform以數學笛卡爾座標系操作。即。右上象限是正-x和正-y(象限1)。您的圖表位於右下方的象限1的y軸翻轉Widget座標中。

旋轉確實逆時針旋轉。但是由於Y軸在Widget座標中翻轉,所以它變爲順時針。

正如你所說,多邊形與小部件無關。它確實會旋轉CCW,但是您可以使用小部件座標對其進行可視化。

+0

謝謝斯蒂芬,這解釋了它。 – Mitch 2012-04-18 00:40:29

3

其實我認爲問題在於所涉及的功能是旋轉座標系而不是對象。如果你想順時針旋轉你的對象,這相當於逆時針旋轉座標系。