我正在使用中点圆算法(bresenham circle)来有效地绘制整个圆。有没有类似画圆弧的东西?我想指定一个开始角度和结束角度,并且只绘制圆的那一部分。
提前致谢!
编辑:我也想画实心圆弧,即饼片。:)
我正在使用中点圆算法(bresenham circle)来有效地绘制整个圆。有没有类似画圆弧的东西?我想指定一个开始角度和结束角度,并且只绘制圆的那一部分。
提前致谢!
编辑:我也想画实心圆弧,即饼片。:)
计算弧的起点和终点,并在到达该点时终止。参见例如http://en.wikipedia.org/wiki/Midpoint_circle_algorithm
你的平台不是已经有一些库可以处理这些形状的绘制吗?
绘制一个填充的饼图:
首先,将馅饼垂直和水平切成四分之一。如果您的饼图正好是这些四分之一,或者完全适合这些四分之一,那么请使用以下过程一次。否则,您的馅饼切片已被切成小块——即使对于一些非常薄的馅饼拼接也可能发生这种情况——对每一块重复以下操作。
我将描述一个适合右上角的部分——其他部分类似。找到弧的开始和结束像素(这可能需要一些触发)。我假设右上角四分之一的该弧线的“开始”像素是“结束”像素左侧更高的像素 - 如果不是,请交换它们以使其如此。
使用 Bresenham 圆算法从顶部开始查找该四分之一圆的边缘上的所有像素。忽略这些值,直到到达“开始”像素——“活动”像素是圆的边缘上从开始像素到结束像素的点。
使用 Bresenham 线算法查找“左”线上的像素(从弧的“开始”像素开始的线,一直到圆的中心)。
对于弧的每个扫描线(每个 y 值),绘制一条水平线以覆盖从左侧线的最左侧像素到弧上最右侧活动像素的所有水平像素。(在四分之一圆的顶部附近,边缘上可能有许多像素位于同一扫描线 y 值上)
处理完圆形边缘中的所有活动像素后,填充剩余的三角形(如果有)。一种方法:对于每条扫描线(每个y值),从上到下,画一条水平线,覆盖从左线最左边像素到右线最右边像素的所有水平像素,直到到达圆的中心。(如果起始像素靠近该四分之一圆的底部,则左行和右行可能有许多像素位于同一扫描线 y 值上)。