C++ 理解Qt';s变换旋转函数

C++ 理解Qt';s变换旋转函数,c++,qt,rotation,coordinates,C++,Qt,Rotation,Coordinates,因此,我想进一步了解Qt的QTransform::rotate函数,它说: QTransform&QTransform::rotate(qreal角度,Qt::Axis=Qt::ZAxis) 将坐标系绕指定轴逆时针旋转给定角度,并返回对矩阵的引用 请注意,如果将QTransform应用于小部件坐标中定义的点,则旋转方向将为顺时针方向,因为y轴指向下方 角度以度为单位指定 从上一个问题中,我了解到要顺时针旋转QPolygonF,实际上必须根据rotate功能逆时针旋转90度: QPolygonF

因此,我想进一步了解Qt的
QTransform::rotate
函数,它说:

QTransform&QTransform::rotate(qreal角度,Qt::Axis=Qt::ZAxis)

将坐标系绕指定轴逆时针旋转给定角度,并返回对矩阵的引用

请注意,如果将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;
例如,对于该矩形:

要旋转到此处,请执行以下操作:


为什么会这样?为什么文档中说,当我认为自己不在“小部件坐标”中时,我对
QTransform::rotate
的调用实际上导致了顺时针旋转?这里没有涉及小部件。

QTransform在数学笛卡尔坐标系中运行。即,右上象限为正x和正y象限(象限1)。您的图表位于y轴翻转小部件坐标中,象限1位于右下角

旋转确实逆时针旋转。但由于Y轴在小部件坐标中翻转,所以它变成顺时针方向


正如您提到的,多边形与小部件无关。它确实是逆时针旋转的,但是你用小部件坐标来可视化它。

事实上,我认为问题在于所讨论的函数旋转坐标系,而不是对象。如果要顺时针旋转对象,这相当于逆时针旋转坐标系。

谢谢Stephen,这就解释了。
QPolygonF(QPointF(3, 0) QPointF(3, 4) QPointF(2, 4) QPointF(2, 0) )