具有偶数个像素的直径的中点算法?

时间:2012-11-27 11:52:22

标签: geometry bresenham

使用Midpoint circle algorithm可以绘制对称圆圈,只访问每个像素一次。由于算法的性质,它只能绘制奇数直径(2 * r + 1)的圆。是否可以扩展此算法,以便它可以成功绘制直径为偶数像素数的圆圈?

算法的一些要求:

  • 必须只绘制一次像素。
  • RAM很贵。

如果确实无法修改中点圆算法来处理这个问题,那么以下解决方案就可以了:

void DrawCircle(int x, int y, int diameter)
{
    if (diameter % 2 == 0)
        EvenWidthCircle(x, y, diameter / 2);
    else
        MidpointCircle(x, y, diameter / 2);
}

2 个答案:

答案 0 :(得分:1)

你可以使用中点算法得到偶数直径,但你需要做一点修改,对于直径为8的圆,使用中点算法做直径7圆,然后:

2 | 1
-----
3 | 4

对于象限1中的八分圆,什么也不做。对于2,向左移动1.对于3,向左和向下移动。对于4,向下移动,然后填写缺少的像素/块/无论你正在制作圈子。

答案 1 :(得分:1)

一般的想法是将每个像素分成2x2子像素,使其直径加倍,使其均匀。