Bresenham中点圆的绘制算法
(注:我的文章都是用word写的,从word直接复制到博客,会出现很多格式问题,本人偷懒就直接从word截图粘贴到博客,阅读体验会降低,请谅解!)
void circleMidPoint(const int xc, const int yc, const int r)
{
if(r <= 1) return; //圆的半径至少要大于一个像素,
int p = 1-r;
int x = 0;
int y = r;
SetPixel(x+xc,y+yc);
SetPixel(x+xc,-y+yc);//绘制对称位置处的点
SetPixel(y+xc,x+yc);
SetPixel(-y+xc,x+yc);
while (x < y)
{
if (p>0)
{
p = p + 2*(x - y) + 5;
y--;
}
else
{
p = p + 2*x + 3;
}
x++;
SetPixel(x+xc,y+yc);
SetPixel(y+xc,x+yc); //点(x,y)关于y=x对称
SetPixel(x+xc,-y+yc);//点(x,y)关于x轴对称y
SetPixel(-x+xc,y+yc); //点(x,y)关于y轴对称
SetPixel(-y+xc,-x+yc); //点(x,y)关于y=-x对称
SetPixel(y+xc,-x+yc); //点(y,x)关于x轴对称
SetPixel(-y+xc,x+yc); //点(-x,y)关于y=-x对称
SetPixel(-x+xc,-y+yc); //点(x,y)关于原点对称
}
}