【问题标题】:Determining the correct origin to rotate a QPolygonF around确定正确的原点以旋转 QPolygonF
【发布时间】:2012-04-28 11:45:28
【问题描述】:

编辑:添加了更多信息。

我想围绕下图所示的原点旋转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) )

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

我应该在什么时候旋转?

【问题讨论】:

    标签: c++ qt rotation polygon


    【解决方案1】:

    编辑

    在我现在知道正确的代码来实现这一点之后弄清楚你是什么之后:

    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) 在围绕矩形的边缘而非中间旋转时不会给出相同的结果。 p>

    概念化 QT 转换

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

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

    【讨论】:

    • 这些点是正确的,因为我希望多边形以某种方式旋转 - 如我发布的第一张图片所示。我尝试使用(2, 3) 作为我的支点,但它给了我这个不是我想要的输出:{(0, 4), (0, 0), (1, 0), (1, 4)}。我所追求的是these locations
    • 啊,那你想翻译一下(2,1)。 (您想从左上角(0, 1) 翻译到中点(2, 2)(2, 2) - (0, 1) = (2, 1)。我已经修改了我原来的答案
    • 这样做gives me{(2, 3), (2, -1), (3, -1), (3, 3)}。只是为了确认一下,来源原来是(0, 0)
    • 您是否尝试过原来的方法,但使用rotate(90) 而不是rotate(-90)
    • 是的,但这只是逆时针旋转。我更新了我的问题以添加更多信息。
    【解决方案2】:

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

    t.translate(2, 2);
    

    要获得你的转换应该是:

    t.translate(2, 1);
    

    据我所知,矩形的下界是 y = 1 ...

    【讨论】:

    • 我已经尝试过了,但它不起作用。原始矩形/多边形的底部 y 坐标是 2。我已经更新了我的问题,希望能更好地传达我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 2019-03-29
    • 2019-02-28
    • 1970-01-01
    相关资源
    最近更新 更多