1

编辑:添加了更多信息。

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

块旋转

我想要这个多边形(图像中心是原点 - 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) )

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

错误的旋转

我应该在什么时候旋转?

4

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(3, 0) QPointF(3, 4) QPointF(2, 4) QPointF(2, 0) )

这是您所期望的(尽管由于轮换,顺序会发生变化)。值得注意的是,rotate(90)并且rotate(-90)不会给出与围绕矩形边缘旋转相同的结果,而不是它的中间

概念化 QT 变换

由于 qt旋转函数的方向,可能会出现一些混淆。尽管这会产生逆时针旋转,但因为我们“看到”y 轴倒转(至少在这种情况下),它对我们来说似乎是顺时针旋转。

打个比方,如果我在一个房间里观察一盏灯从左边掉下来,从悬挂在天花板上的人的角度来看,它已经“掉到”右边了。

于 2012-04-17T06:21:57.763 回答
0

我只是看了一眼,但我认为这是错误的:

t.translate(2, 2);

要获得您的转换应该是:

t.translate(2, 1);

据我了解,矩形的下界在 y = 1 处...

于 2012-04-17T08:44:30.207 回答