QPainter - 沿圆圈绘制对象
QPainter - draw objects along a circle
我想在整个圆圈周围绘制那些黑点,彼此之间有规则的间距(下图的粗略图)。那些黑点应该直接坐在圆圈上。有没有一种简单的方法可以用 painter.drawArc()
函数或类似的东西来做?
不,没有。 I am afraid you will have to use... math!
实际上,没有那个你也可以逃脱。特别是对于围绕一个圆圈进行扫掠,有一种简单的方法可以通过变换画家来完成。您最初将画家变换到圆心,并在圆的 12 点钟位置绘制第一个点。这意味着将其绘制为负 y space。然后,您只需将画家旋转 360 / numOfObjects
度,然后再次绘制相同的圆圈。
这里最关键的是将painter转换到中心,绘制物体偏移,否则自己计算位置和角度会比较复杂。角度在这里不起作用,因为您绘制的是点,但是如果您绘制的不是点,角度就会有很大的不同。这样你就可以很容易地通过围绕它的原点旋转画家来扫圆。
用伪代码表示:
draw big circle
move painter to big circle center
degree = 360 / numOfObjects
while numOfObjects--
draw dot at 12 o'clock
rotate painter by degree
我想在整个圆圈周围绘制那些黑点,彼此之间有规则的间距(下图的粗略图)。那些黑点应该直接坐在圆圈上。有没有一种简单的方法可以用 painter.drawArc()
函数或类似的东西来做?
不,没有。 I am afraid you will have to use... math!
实际上,没有那个你也可以逃脱。特别是对于围绕一个圆圈进行扫掠,有一种简单的方法可以通过变换画家来完成。您最初将画家变换到圆心,并在圆的 12 点钟位置绘制第一个点。这意味着将其绘制为负 y space。然后,您只需将画家旋转 360 / numOfObjects
度,然后再次绘制相同的圆圈。
这里最关键的是将painter转换到中心,绘制物体偏移,否则自己计算位置和角度会比较复杂。角度在这里不起作用,因为您绘制的是点,但是如果您绘制的不是点,角度就会有很大的不同。这样你就可以很容易地通过围绕它的原点旋转画家来扫圆。
用伪代码表示:
draw big circle
move painter to big circle center
degree = 360 / numOfObjects
while numOfObjects--
draw dot at 12 o'clock
rotate painter by degree