绘制圆弧的有效算法?

时间:2010-06-15 10:51:50

标签: algorithm graphics image-processing bresenham

我正在使用中点圆圈算法(bresenham圈)来有效地绘制整个圆圈。是否有类似绘制圆弧的东西?我想指定一个起始角度和结束角度,并且只绘制圆圈​​的那一部分。

提前致谢!

编辑:我想绘制实心圆弧,即饼图。 :)

2 个答案:

答案 0 :(得分:2)

计算弧的起点和终点,并在达到此点时终止。参见例如http://en.wikipedia.org/wiki/Midpoint_circle_algorithm

答案 1 :(得分:1)

您的平台是否已经有一些处理这些形状的库?

绘制填充的饼图:

首先,将馅饼垂直和水平切成四分之一。 如果您的饼图正好是这些季度中的一个,或完全适合其中一个季度,请使用以下过程一次。 否则你的馅饼切片会被切成碎片 - 即使对于一些非常瘦的馅饼拼接也会发生这种情况 - 每件都重复以下。

我将描述一个适合右上角的馅饼切片 - 其他季度相似。 找到弧的开始和结束像素(这可能需要一些触发)。 我假设右上角的这个弧的“开始”像素是“结束”像素的较高和左边的一个 - 如果没有,交换它们就可以了。

使用Bresenham圆算法从顶部开始查找圆周四分之一边缘的所有像素。忽略这些值,直到你到达“开始”像素 - “活动”像素是从开始像素到结束像素的圆圈边缘上的点。

使用Bresenham线算法查找“左”线上的像素(从弧的“开始”像素开始的线,直接到圆的中心)。

对于弧的每条扫描线(每个y值),绘制一条水平线以覆盖从左边的最左边像素到弧上最右边有效像素的所有水平像素。 (在四分之一圆的顶部附近,轮辋上可能有许多像素位于同一扫描线y值上)

一旦你处理了圆圈中的所有活动像素, 填写剩余的三角形,如果有的话。 单程: 对于每个扫描线(每个y值),从上到下,绘制一条水平线以覆盖从左线的最左边像素到右边最右边像素的所有水平像素, 直到你到达圆圈的中心。 (如果起始像素位于此四分之一圆的底部附近,则左侧线和右侧线上可能有许多像素位于同一扫描线y值上。)