n像素边界的圆绘制算法

时间:2011-09-10 22:06:16

标签: graphics

我知道bressenham和相关算法,我找到了一个很好的算法来绘制一个1像素宽边框的圆。是否有任何“标准”算法来绘制具有n像素宽边框的圆圈,而无需恢复绘制n个圆圈?

绘制像素和n ^ 2周围的像素可能是一种解决方案,但它会比所需的更多像素。

我正在为嵌入式系统编写一个图形库,所以我不是在寻找一种使用现有库来实现这一目标的方法,尽管实现此功能并且是开源的库可能是一个领导者。

2 个答案:

答案 0 :(得分:1)

同时为两个半径计算单个八分圆的点,同时以八种方式复制它,这就是通常绘制Bresenham圆的方式。为避免过度绘制(例如,对于XOR绘图),应限制第二个八分圆在第一个八分圆的x范围之外绘制。

请注意,如果线与半径相比非常粗,则此方法会失效。

答案 1 :(得分:1)

将其视为光栅化问题:

拿走你的环的边界框。 考虑落在边界框中的图像行。 对于每一行,计算与2个圆的交集(即求解x ^ 2 + y ^ 2 = r ^ 2,因此x = sqrt(r ^ 2-y ^ 2)为每个,对于x,y相对于圆中心。 填写跨度。重复下一行。

这种方法可以推广到各种形状,可以产生对抗锯齿有用的子像素坐标,并且可以提高分辨率,而不是涉及多次移位绘制的hacky解决方案。

如果sqrt对于嵌入式系统看起来很可怕,请记住有快速近似算法,这可能足够好,特别是如果你四舍五入到最近的像素。