在不使用矩形的情况下,我能否在Qt C++中绘制椭圆?

5

我正在使用Qt中的c++,想要绘制一个椭圆。

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

void QPainter::drawEllipse(const QRectF &rectangle)

矩形的表示方式如下:

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

然而,这只提供一个具有水平/垂直主轴和次轴的椭圆。我的椭圆由两组坐标给出以表示主轴和主轴长度与次轴长度之比。因此,轴可以具有不是水平或垂直的斜率。(无论如何我需要使用这种方法,因为我还将其导出到具有此符号的dxf文件中)。我的问题是:是否有其他绘制椭圆的方法而不是使用边界矩形然后旋转它?似乎有点傻把它放入水平/垂直矩形中然后计算旋转角度,当我从一开始就有轴的坐标时。

1
我快速搜索了文档,从中了解到QPainter使用某种坐标系统来绘制图形,您可以对其应用变换来绘制例如长轴不是水平/垂直的椭圆。请参见此处:http://doc.qt.io/qt-4.8/coordsys.html - 463035818_is_not_a_number
1
顺便问一下,使用边界矩形并旋转它有什么问题吗?你只需要计算相应的数字即可。 - 463035818_is_not_a_number
此外,使用绘制/旋转方法,您可以绘制一个椭圆,并通过旋转和缩放创建其余的椭圆,在Qt中比分别绘制它们更少消耗资源。 - Nicolas Holthaus
在我看来,如果Qt提供另一种绘制椭圆的方法,那将是愚蠢的。因为已经可以通过旋转边界矩形来绘制任意椭圆了。 - 463035818_is_not_a_number
访问此链接:https://dev59.com/mF4b5IYBdhLWcg3wZwy3 - Farhad
1个回答

1

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

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

不需要计算旋转角度。由于您已经知道了长轴,因此可以轻松地将其标准化并导出一个正交向量。这些向量形成一个正交基,它们的分量是您将设置在绘图程序上的方向余弦变换矩阵

由于长轴方向已经表示为向量,因此您无需计算任何超越函数即可获得绘图程序的变换矩阵。即使您需要求逆矩阵(实际上您不需要),也只需要非常少的加法和乘法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接