确定旋转QPolygonF的正确原点

时间:2012-04-17 06:16:41

标签: c++ qt rotation polygon

编辑:添加了更多信息。

我想围绕下图所示的原点旋转QPolygonF

block rotations

我想要这个多边形(图像中心是原点 - 0, 0):

first polygon

顺时针旋转,使其最终到达:

enter image description here

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) )

但是,根据上面的输出,多边形最终看起来像这样:

wrong rotation

我应该在哪个地方转动?

2 个答案:

答案 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