使用Midpoint circle algorithm可以绘制对称圆圈,只访问每个像素一次。由于算法的性质,它只能绘制奇数直径(2 * r + 1)的圆。是否可以扩展此算法,以便它可以成功绘制直径为偶数像素数的圆圈?
算法的一些要求:
如果确实无法修改中点圆算法来处理这个问题,那么以下解决方案就可以了:
void DrawCircle(int x, int y, int diameter)
{
if (diameter % 2 == 0)
EvenWidthCircle(x, y, diameter / 2);
else
MidpointCircle(x, y, diameter / 2);
}
答案 0 :(得分:1)
你可以使用中点算法得到偶数直径,但你需要做一点修改,对于直径为8的圆,使用中点算法做直径7圆,然后:
2 | 1
-----
3 | 4
对于象限1中的八分圆,什么也不做。对于2,向左移动1.对于3,向左和向下移动。对于4,向下移动,然后填写缺少的像素/块/无论你正在制作圈子。
答案 1 :(得分:1)
一般的想法是将每个像素分成2x2子像素,使其直径加倍,使其均匀。