As a result of this question, I'd like to understand more about Qt's QTransform::rotate
function. In the documentation, it says:
QTransform & QTransform::rotate ( qreal angle, Qt::Axis axis = Qt::ZAxis )
Rotates the coordinate system counterclockwise by the given angle about the specified axis and returns a reference to the matrix.
Note that if you apply a QTransform to a point defined in widget coordinates, the direction of the rotation will be clockwise because the y-axis points downwards.
The angle is specified in degrees.
From my previous question, I learned that to rotate a QPolygonF
clockwise, I must actually rotate it 90 degrees counter-clockwise, according to the rotate
function:
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;
Output:
QPolygonF(QPointF(3, 0) QPointF(3, 4) QPointF(2, 4) QPointF(2, 0) )
E.g. for this rectangle:
To rotate to here:
Why is this? Why does the documentation say that my call to QTransform::rotate
is actually causing a clockwise rotation when I believe I'm not in "widget coordinates" - there are no widgets involved here.
QTransform operates in mathematical Cartesian coordinate system. ie. the top-right quadrant is the positive-x and positive-y one (quadrant 1). Your chart is in the y-axis-flipped Widget coordinates with quadrant 1 at lower-right.
Rotate does rotate counterclockwise. But since Y-axis is flipped in Widget coordinates, it becomes clockwise.
As you mentioned, polygon has nothing to do with widgets. It does rotate CCW, but you are visualizing it with widget coordinates.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With