编辑:添加了更多信息。
我想围绕下图所示的原点旋转QPolygonF
:
我想要这个多边形(图像中心是原点 - 0, 0
):
顺时针旋转,使其最终到达:
QPolygonF
的点位于与上图中第一个块相同的位置:
QPolygonF p1 = QPolygonF() << QPointF(0, 1) << QPointF(4, 1) << QPointF(4, 2) << QPointF(0, 2);
然后我转动我认为正确的原点(2, 2
):
QTransform t;
t.translate(2, 2);
t.rotate(-90);
t.translate(-2, -2);
QPolygonF p2 = t.map(p1);
qDebug() << p1 << "rotated = " << p2;
输出:
QPolygonF(QPointF(0, 1) QPointF(4, 1) QPointF(4, 2) QPointF(0, 2) ) rotated = QPolygonF(QPointF(1, 4) QPointF(1, 0) QPointF(2, 0) QPointF(2, 4) )
当我想要的输出是:
QPolygonF(QPointF(0, 1) QPointF(4, 1) QPointF(4, 2) QPointF(0, 2) ) rotated = QPolygonF(QPointF(2, 0) QPointF(3, 0) QPointF(3, 4) QPointF(2, 4) )
但是,根据上面的输出,多边形最终看起来像这样:
我应该在哪个地方转动?
答案 0 :(得分:2)
修改强>
在弄清楚你的目标之后,我现在知道正确的代码来实现这个目标:
QTransform t;
t.translate(2, 2);
t.rotate(90);
t.translate(-2, -2);
QPolygonF p2 = t.map(p1);
qDebug() << p1 << "rotated = " << p2;
这将给出矩形:
QPolygonF(QPointF(3, 0) QPointF(3, 4) QPointF(2, 4) QPointF(2, 0) )
您期望的是什么(虽然顺序因轮换而发生变化)。值得注意的是,rotate(90)
和rotate(-90)
不会给出与围绕矩形的边旋转相同的结果,而不是中间它
概念化QT转型
由于qt rotate函数的方向,可能会出现一些混淆。虽然这会产生逆时针旋转,因为我们“看到”y轴反转(至少在这种情况下)它对我们来说是顺时针方向。
作为一个类比,如果我在一个房间,观察者一盏灯落到左边, 从有人挂在葬礼上的角度来看,它已经“摔倒”在右边。
答案 1 :(得分:0)
我只是看了一眼,但我认为这是错误的:
t.translate(2, 2);
要获得你的转型应该是:
t.translate(2, 1);
据我所知,矩形的下限是y = 1