【问题标题】:Can I draw an ellipse in Qt c++ without using a rectangle?我可以在不使用矩形的情况下在 Qt c++ 中绘制椭圆吗?
【发布时间】:2016-04-27 19:34:56
【问题描述】:

我在 Qt 中使用 c++,我想画一个椭圆。 从 Qt 文档中我发现我可以使用 drawEllipse 从边界矩形绘制一个椭圆:

void QPainter::drawEllipse(const QRectF &rectangle)

矩形由下式给出:

QRectF(qreal x, qreal y, qreal width, qreal height)

但是,这仅提供具有水平/垂直长轴和短轴的椭圆。

我的椭圆由两个坐标集给出,分别表示长轴和长轴和短轴的长度之比。因此,轴可以具有不水平或不垂直的斜率。 (无论如何我都需要使用这种方法,因为我也将它导出到具有此符号的 dxf 文件)

我的问题是:

除了使用边界矩形然后旋转它之外,还有其他方法可以绘制椭圆吗?

将它放在一个水平/垂直矩形中,然后在我从一开始就有轴坐标时计算旋转似乎有点傻。

【问题讨论】:

  • 我快速搜索了文档,据我了解,QPainter 使用一些坐标系来绘制东西,您可以对其应用转换来绘制例如一个椭圆,其主轴不是水平/垂直的。看这里:doc.qt.io/qt-4.8/coordsys.html
  • 顺便说一句,使用边界矩形并旋转它有什么问题?你只需要计算相应的数字
  • 另外,使用 draw/rotate 方法,您可以绘制一个椭圆,然后通过旋转和缩放来创建其余的,这在 Qt 中比单独绘制它们占用的资源要少得多。
  • 恕我直言,当已经可以通过旋转边界矩形来绘制任意椭圆时,Qt 提供另一种绘制椭圆的方法会很愚蠢

标签: c++ qt ellipse


【解决方案1】:

除了使用边界矩形然后旋转它之外,还有其他方法可以绘制椭圆吗?

没有。没有。当然,在绘制椭圆之前,您必须先旋转坐标系。

不需要计算旋转角度。由于您获得了主轴,因此您可以轻松地对其进行归一化并导出正交向量。这些向量构成一个标准正交基,它们的分量是您将在painter 上设置的transformation matrix 中的directional cosines

由于长轴方向已经表示为向量,因此您无需计算任何超越函数即可得出画家的变换矩阵。只需要很少的加法和乘法,即使您必须反转矩阵(而您不需要)。

【讨论】:

    猜你喜欢
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 2018-09-03
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多