高效绘制圆弧的算法?

4
我正在使用mid-point circle算法(bresenham circle)来高效地绘制整个圆。是否有类似的算法可以绘制圆弧?我想指定起始角度和结束角度,并且只绘制该圆的一部分。
提前感谢!
编辑:我也想绘制填充的圆弧,即饼状图片。 :)

1
你看到维基百科上相关的部分了吗?http://en.wikipedia.org/wiki/Midpoint_circle_algorithm#Drawing_incomplete_octants - Tomer Vromen
看看这个解决方案:http://www.daniweb.com/forums/thread321181.html - user493444
2个回答

2

请参考此前的问题:https://dev59.com/9XM_5IYBdhLWcg3w2XBg - Krumelur

1

你们的平台没有已经处理这些形状绘制的库吗?

绘制一个填充的饼图:

首先,将饼垂直和水平地切成四份。如果你的饼片恰好是其中之一,或者完全适合其中之一,则只需使用以下过程一次。否则,你的饼片被切成了几块——即使对于一些非常细的饼片也可能发生这种情况——为每个部分重复以下步骤。

我将描述一个适合于右上角的饼片——其他角落类似。找到弧的起始像素和结束像素(这可能需要一些三角函数)。我假设在右上角的这个弧的“开始”像素是高于并在左侧的“结束”像素——如果不是,请交换它们以使其如此。

使用Bresenham圆算法查找该圆的那个象限边缘上的所有像素,从顶部开始。忽略值,直到达到“开始”像素——“活动”像素是从开始像素到结束像素的圆边缘上的点。

使用Bresenham线算法来查找“左侧”线上的像素(该线从弧的“起始”像素开始,直线到圆心)。
对于弧的每个扫描线(每个y值),绘制一条水平线以覆盖从左线最左边的像素到弧上最右侧活动像素的所有水平像素。 (在四分之一圆的顶部附近,可能有许多在同一扫描线y值上的边缘像素)
一旦处理了圆形边缘中的所有活动像素, 填充剩余的三角形(如果有)。 一种方法: 对于每个扫描线(每个y值),从上到下绘制一条水平线,以覆盖从左线最左边的像素到右线最右边的像素的所有水平像素, 直到达到圆的中心。 (如果起始像素靠近这个四分之一圆的底部,则左线和右线上可能有许多在同一扫描线y值上的像素)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接