在Pyside中绘制弧线
我想在一个圆上画一些小部件,为此我需要把这些小部件画成弧形。我知道小部件的数量(假设是15个),那么每个小部件在圆心到圆周的角度上相隔36度。我手上有圆心的位置、半径,还有每个小部件在圆周上的起始点和结束点。
这个计算是通过以下方式进行的:
dx = int(round(400 + 300 * np.cos(angle)))
dy = int(round(400 + 300 * np.sin(angle)))
其中 angle = 2 * np.pi / 15
。我用一个循环来计算新的角度值,实际上就是把角度乘以一个变量i,i的范围是从1到10。
不过我不太明白在QPainter的弧形函数中,起始角度和跨度角度是什么意思。QPainter的弧形。我在网上查了一下,发现相关的解释不多,可能是有其他的叫法。
所以我的问题是,我有圆周上的起始点和结束点,还有圆心和半径,我该如何利用这些信息来画出弧形,让它看起来像这样:
我尝试过的方法是,先计算出两个端点的中心点(cx),然后从圆心画一条线到这个中心点cx,再计算这个点到圆周的距离,这个距离就是我的宽度。但是,如何正确地调整方向,让它们看起来像圆形呢?
目前我画的只是一些直线的布局,像这样,但我希望能像circos那样的效果。我的图片
1 个回答
我不太明白QPainter中的弧函数的起始角度和跨度角度是什么意思。
为什么呢?我觉得文档写得很清楚:
起始角度和跨度角度必须用1/16度来表示,也就是说,一个完整的圆等于5760(16 * 360)。
这意味着你的单位是1/16度。比如,45度就是45乘以16的单位。
角度的正值表示逆时针方向,而负值表示顺时针方向。零度的位置在3点钟方向。
这意味着90乘以16指向12点钟(从3点钟开始逆时针转90度),而-90乘以16指向6点钟。
当然,"零"度只对起始角度有意义。跨度角度表示弧线还要延伸多远,以及朝哪个方向。
例如,要画一条从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)