2010-06-15 183 views
4

我正在使用中點圓算法(bresenham circle)來高效地繪製整個圓。有沒有類似畫圓弧?我想指定一個起始角度和結束角度,並且只繪製圓的那部分。繪製圓弧的高效算法?

在此先感謝!

編輯:我也想繪製實心的圓弧,也就是餅片。 :)

+1

您是否看到了維基百科的相關部分? http://en.wikipedia.org/wiki/Midpoint_circle_algorithm#Drawing_incomplete_octants – 2010-06-15 10:54:29

+0

看看這個解決方案:http://www.daniweb.com/forums/thread321181.html – 2010-11-01 10:24:21

回答

1

您的平臺是否已經有一些處理繪製這些形狀的庫?

繪製填充扇形區:

首先,把餡餅垂直和水平,到宿舍。 如果你的餡餅切片恰好是這些區域中的一個,或者完全適合這些區域中的一個,則使用以下過程一次。 否則你的餡餅切片已被切成片 - 即使對於一些非常瘦的餡餅拼接,也可能會發生這種情況 - 爲每件作品重複以下步驟。

我要描述一個適合於右上角的扇形餅 - 其他地方是相似的。 查找圓弧的開始和結束像素(這可能需要一些觸發)。 我假定這條弧的「開始」像素在右上角是高於「結束」像素的左側,如果不是,則交換它們使其成爲如此。

使用Bresenham圓算法從頂部開始查找圓的四分之一圓圈的所有像素。忽略這些值,直到到達「開始」像素 - 「有效」像素是從開始像素到結束像素的圓圈邊緣上的點。

使用Bresenham線算法來查找「左」線(從弧的「開始」像素開始並直接到圓心)的像素。

對於弧的每個掃描線(每個y值),繪製一條水平線以覆蓋從左邊線的最左邊像素到弧上最右邊有效像素的所有水平像素。 (靠近四分之一圓的頂部,邊緣上可能有很多像素位於同一掃描線上的y值)

一旦處理完圓圈中的所有活動像素,即 填寫剩下的三角形,如果有的話。 單向: 對於每個掃描線(每個y值),從上到下繪製一條水平線以覆蓋從左線的最左像素到右線最右像素的所有水平像素, 直到你到達圓圈的中心。 (如果起始像素接近該四分之一圓的底部,則左側線和右側線上可能有許多像素位於同一掃描線y值上)。

2

計算圓弧的起點和終點,並在到達此點時終止。見例如http://en.wikipedia.org/wiki/Midpoint_circle_algorithm

+0

謝謝,但如果我需要一個填充弧? (就像一個餡餅片) – horseyguy 2010-06-15 23:48:18

+0

看到這個前一個問題http://stackoverflow.com/questions/1201200/fast-algorithm-for-drawing-filled-circles – Krumelur 2010-06-16 05:56:20