在Pyside绘制弧

时间:2014-03-28 00:09:53

标签: python algorithm qt geometry pyside

我试图在圆圈上绘制小部件,为此我需要将小部件绘制成弧形。我知道小部件的数量(让我们说),然后每个小部件从原点到圆周都是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。我用谷歌搜索,没有多少条款出现。也许他们有不同的术语。

所以问题是我在圆周和中心和半径上有一个起点和终点,我如何使用它们绘制弧线,以便得到看起来像的东西:

circos

我试过的是,我可以计算两个端点的中心点(cx),如果我从圆心到此点cx画一条线,那么我可以计算这个点周长到底有多远本质上是我的宽度,但如何使方向正确以将它们表示为圆圈。

而不是圆形,我确实有一个像这样的线条的布局,但是想要像马戏团一样。 My image

1 个答案:

答案 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)

不使用中心和半径指定圆弧,而是使用边界矩形指定圆弧。如果弧是一个完整的椭圆,它将被刻在矩形中 - 弧是隐式椭圆弧。

因此,给定xy中心点,以及圆弧半径为r,边界矩形为

rect = QRect(x-r, y-r, 2*r, 2*r)