我试图在圆圈上绘制小部件,为此我需要将小部件绘制成弧形。我知道小部件的数量(让我们说),然后每个小部件从原点到圆周都是36度。我所拥有的信息是圆心,半径,我知道每个这样的小部件的圆周上的起点和终点。
这是通过执行
计算的 dx = int(round(400 + 300 * np.cos(angle)))
dy = int(round(400 + 300 * np.sin(angle)))
其中angle = 2 * np.pi / 15
我通过for循环计算角度的新值,基本上是角度* i,其中i =(1,10)
我不了解QPainter中弧线函数的起始角度和跨度角度。QPainter Arc。我用谷歌搜索,没有多少条款出现。也许他们有不同的术语。
所以问题是我在圆周和中心和半径上有一个起点和终点,我如何使用它们绘制弧线,以便得到看起来像的东西:
我试过的是,我可以计算两个端点的中心点(cx),如果我从圆心到此点cx画一条线,那么我可以计算这个点周长到底有多远本质上是我的宽度,但如何使方向正确以将它们表示为圆圈。
而不是圆形,我确实有一个像这样的线条的布局,但是想要像马戏团一样。 My image
答案 0 :(得分:2)
我不了解QPainter.QPainter Arc中弧线函数的起始角度和跨度角度。
为什么呢?恕我直言的文件很清楚:
startAngle和spanAngle必须以1/16度指定,即整圆等于5760(16 * 360)。
这意味着您的单位为1 /16º。例如。 45º是45 * 16单位。
角度的正值表示逆时针,而负值表示顺时针方向。零度位于3点位置。“
这意味着12点钟位置为90 * 16点(3点钟位置逆时针旋转90度),6点钟点位置为-90 * 16点。
当然,“零”度仅对起始角度有意义。跨度角指示弧进一步以及向哪个方向移动。
例如,要从3点钟到12点钟绘制弧线,您需要
painter.drawArc(rect, 0, 90*16)
*or*
painter.drawArc(rect, 90*16, -90*16)
但要从3点到6点画一个圆弧,你就可以了。
painter.drawArc(rect, 0, -90*16)
*or*
painter.drawArc(rect, -90*16, 90*16)
不使用中心和半径指定圆弧,而是使用边界矩形指定圆弧。如果弧是一个完整的椭圆,它将被刻在矩形中 - 弧是隐式椭圆弧。
因此,给定x
和y
中心点,以及圆弧半径为r
,边界矩形为
rect = QRect(x-r, y-r, 2*r, 2*r)