【问题标题】:How to calculate co-ordinates of rectangle if I know one co-ordinate size and angle of rotation?如果我知道一个坐标大小和旋转角度,如何计算矩形的坐标?
【发布时间】:2015-06-18 16:55:47
【问题描述】:

我在旋转 qgraphicsitem 并调整其大小时遇到​​问题。我正在绘制两个 qgraphicsitem 一个来调整内部 qgraphicsitem 的大小。当我旋转内部项目时,我想找到内部(旋转)项目的所有坐标,但是当我旋转它时,我只得到这个项目的 scenePos() 而没有其他点,即它给了我 topLeft 点。如图

我想找到该项目的所有黑圈点。这两个项目都添加到场景中。

【问题讨论】:

  • 你能不使用三角函数来找到这些值吗?
  • 是的,但是我怎么能用三角,你能解释一下公式是什么
  • 不太清楚:你有连接T&L的点还是白色方块的左上角?
  • 我有白色项目的所有点,灰色项目的大小和旋转以及 L 和 T 之间的角度
  • 角度在 L 和 T 之间?灰色项不是矩形(强制该角度为 90)吗?也许您指的是 T 和白色形状的上边缘之间的角度?

标签: c++ qt rotation resize qgraphicsitem


【解决方案1】:

使用QTransform。像这样的:

QTransform t;
t.rotate(angle);
QPolygon polygon = t.mapToPolygon(rect)

【讨论】:

  • 当我使用上述方法时,我没有得到精确的矩形。我通过 rect 作为 t.mapToPolygon(QRect(QPoint(regFrame->scenePos()), QSize(regFrame->boundingRect().size())));
  • 好吧,这个方法的结果不是一个矩形——它是一个由点组成的多边形。帮助提示:Polygons and rectangles behave slightly differently when transformed (due to integer rounding), so matrix.map(QPolygon(rectangle)) is not always the same as matrix.mapToPolygon(rectangle).
【解决方案2】:

如果问题中没有显示代码,我将假设您有一个继承自 QGraphicsItem 的类,并且您正在绘制函数中绘制一个矩形。

这意味着您在相应的boundingRect 函数中返回项目的边界矩形。

您可能已经发现,边界矩形不会随着项目的旋转而旋转。

如果您实现shape 函数,您将能够调用它以通过QPainter::toFillPolygon 传递项目的当前变换来检索多边形的点。

【讨论】:

    猜你喜欢
    • 2012-04-15
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    相关资源
    最近更新 更多