2

使用中点圆算法,您可以绘制对称圆,每个像素只访问一次。由于算法的性质,它只能绘制奇数直径(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);
}
4

2 回答 2

1

您可以对偶数直径使用中点算法,但您必须做一些修改,对于直径为 8 的圆,使用中点算法做一个直径为 7 的圆,然后:

2 | 1
-----
3 | 4

对于象限 1 中的八分圆,什么都不做。对于 2,左移 1。对于 3,左移和下移。对于 4,向下移动,然后填充缺失的像素/块/无论你用什么做圆圈。

于 2013-01-11T07:04:12.383 回答
1

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

于 2016-05-31T00:55:37.003 回答