2014-03-28 54 views
1

我正在試圖在圓上繪製小部件,爲此我需要將小部件繪製爲弧形。我知道小部件的數量(比方說),然後每個小部件在從起點到周長的36度處。我擁有的信息是圓圈的中心,半徑,我知道每個這樣的小部件的圓周的起點和終點。Pyside中的繪圖弧

這是通過做

dx = int(round(400 + 300 * np.cos(angle))) 
    dy = int(round(400 + 300 * np.sin(angle))) 

計算其中angle = 2 * np.pi/15 我走在for循環計算爲角度的新值,該值基本上是角*其中i =(1,10)

我不瞭解QPainter中弧函數的起始角度和跨度角度。 QPainter Arc。我GOOGLE了一下,沒有多少條款出來。也許他們有不同的用語。

所以,問題是我對周邊和圓心和半徑,我該如何使用它們來畫弧,使得我得到的東西看起來起點和終點,如:

circos

我所嘗試的是,我可以計算兩個端點的中心點(cx),如果從圓心到這個點cx繪製一條直線,那麼我可以計算出這個圓周點的距離,它基本上是我的寬度,但如何獲得正確的方向以將它們表示爲圓形。

而不是循環我有一個這樣的線條佈局,但想要像circos一樣。 My image

回答

2

我不明白,在QPainter.QPainter弧弧功能的啓動角和角寬度。

爲什麼?該文檔IMHO很清楚:

的由startAngle和spanAngle必須在一定程度的1/16來指定,即整圈相當於5760(16 * 360)。

這意味着你的單位是1/16º。例如。 45º是45 * 16個單位。

角度的正值表示逆時針方向,負值表示順時針方向。零度是在3點鐘位置。」

這意味着,在12時90個* 16點(90°變爲從3點逆時針)和-90 * 16點在6點

當然,「零」度僅對起始角度有意義,跨度角度狀態多少進一步做的弧線,以及在哪個方向。

例如,繪製從3點鐘到12點鐘的弧線,你會做

painter.drawArc(rect, 0, 90*16) 
*or* 
painter.drawArc(rect, 90*16, -90*16) 

但是從3點鐘劃出一道弧線到6點鐘,你'd do

painter.drawArc(rect, 0, -90*16) 
*or* 
painter.drawArc(rect, -90*16, 90*16) 

未使用center和radius指定圓弧,而是使用邊界矩形。如果圓弧是一個完整的橢圓,它將被刻在矩形中 - 圓弧是隱式的橢圓弧。

因此,對於圓半徑給出xy中心點,並r,邊框是

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

庫巴,非常感謝您的response.I沒有掌握什麼起始角度和跨度角。我試圖將它們連接到扇區的弧長和角度,這可能是我做錯了。同樣對於矩形座標,您是否正在使用圓的中心和半徑,因爲這會使邊界矩形從中心取向。讓我知道如果你的意思是其他的中心點 – gizgok

+0

@gizgok邊界矩形的中心點應該在矩形對角線的交點處,這就是我編碼的。這個中心點與內切圓的中心點重合。 –

+0

那麼這個中心點就會成爲弧線上的一個點?我曾嘗試的是在我想要的地方構建矩形,但可能我沒有把它弄清楚。 – gizgok