【问题标题】:Understanding Qt's QTransform rotate function了解 Qt 的 QTransform 旋转功能
【发布时间】:2012-04-28 21:02:08
【问题描述】:

由于this question,我想更多地了解Qt 的QTransform::rotate 函数。 In the documentation,上面写着:

QTransform & QTransform::rotate (qreal angle, Qt::Axis 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;

输出:

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

例如对于这个矩形:

要旋转到这里:

这是为什么?当我相信我不在“小部件坐标”中时,为什么文档说我对QTransform::rotate 的调用实际上会导致顺时针旋转 - 这里不涉及任何小部件。

【问题讨论】:

    标签: c++ qt rotation coordinates


    【解决方案1】:

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

    Rotate 确实逆时针旋转。但是由于Y轴在Widget坐标中是翻转的,所以变成了顺时针方向。

    正如您所提到的,多边形与小部件无关。它确实逆时针旋转,但您正在使用小部件坐标对其进行可视化。

    【讨论】:

    • 谢谢斯蒂芬,这解释了它。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-26
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多