gpt4 book ai didi

c++ - 确定正确的原点以围绕 QPolygonF 旋转

转载 作者:行者123 更新时间:2023-11-30 04:28:23 25 4
gpt4 key购买 nike

编辑:添加了更多信息。

我想围绕原点旋转 QPolygonF,如下所示:

block rotations

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

first polygon

顺时针旋转以使其在此处结束:

enter image description here

QPolygonF 的点与上图中第一个 block 的位置相同:

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

我应该在哪个点旋转?

最佳答案

编辑

在弄清楚你是什么之后,我现在知道了实现这个目标的正确代码:

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) 不会给出与您围绕 edge 旋转相同的结果矩形,而不是它的中间

概念化 QT 转换

由于 qt rotate 的方向可能会引起一些混淆功能。虽然这将执行逆时针旋转,但因为我们“看到”y 轴是倒转的(至少在这种情况下),所以它看起来是顺时针旋转的。

打个比方,如果我在一个房间里观察一盏灯向左倾倒,从悬卡在天花板上的人的角度来看,它已向右“倒下”。

关于c++ - 确定正确的原点以围绕 QPolygonF 旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10186102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com