【问题标题】:efficient algorithm for drawing circle arcs?绘制圆弧的有效算法?
【发布时间】:2011-03-03 22:24:32
【问题描述】:
我正在使用中点圆算法(bresenham circle)来有效地绘制整个圆。有没有类似画圆弧的东西?我想指定一个开始角度和结束角度,并且只绘制圆的那一部分。
提前致谢!
编辑:我也想画实心圆弧,即饼片。 :)
【问题讨论】:
标签:
algorithm
graphics
image-processing
bresenham
【解决方案2】:
你的平台不是已经有一些库来处理这些形状的绘制吗?
绘制一个填充的饼图:
首先,将馅饼纵向和横向切成四等份。
如果您的饼图正好是这些四分之一中的一个,或者完全适合这些四分之一中的一个,那么请使用以下过程一次。
否则,您的馅饼切片已被切成小块 - 即使对于一些非常薄的馅饼拼接也可能发生这种情况 - 对每一块重复以下操作。
我将描述一个适合右上角四分之一的饼图 - 其他四分之一类似。
找到弧的开始和结束像素(这可能需要一些触发)。
我假设右上四分之一的弧线的“开始”像素是“结束”像素的左侧更高的像素 - 如果不是,请交换它们以使其如此。
使用 Bresenham 圆算法从顶部开始查找该四分之一圆的边缘上的所有像素。在到达“开始”像素之前忽略这些值——“活动”像素是圆的边缘上从开始像素到结束像素的点。
使用 Bresenham 线算法查找“左”线上的像素(从弧的“开始”像素开始的线,一直到圆的中心)。
对于弧的每条扫描线(每个 y 值),绘制一条水平线以覆盖弧上从左侧线的最左侧像素到最右侧活动像素的所有水平像素。
(在四分之一圆的顶部附近,边缘上可能有许多像素在同一扫描线 y 值上)
处理完圆形边缘中的所有活动像素后,
填写剩余的三角形,如果有的话。
单程:
对于每条扫描线(每个y值),从上到下,画一条水平线,覆盖从左线最左边像素到右线最右边像素的所有水平像素,
直到你到达圆的中心。
(如果起始像素位于该四分之一圆的底部附近,则左行和右行可能有许多像素在同一扫描线 y 值上)。