当得到增量关系后,一切就变得很简单,初始点一定是(0,R),从初始点开始不断递增,直到画满整个第一象限,同时利用对称性,画出整个圆。参考代码如下:
void Circle::DrawPic(CDC *pDC)
{
/*四分圆画图*/
int d = 2-2*r;
int dv,dh;
CPoint cur(0,r);
enum{H,D,V} choice;
for(;cur.y >= 0;)
{
//画出点
pDC->SetPixel(ps.x+cur.x,ps.y+cur.y,RGB(0,0,0));
pDC->SetPixel(ps.x+cur.x,ps.y-cur.y,RGB(0,0,0));
pDC->SetPixel(ps.x-cur.x,ps.y+cur.y,RGB(0,0,0));
pDC->SetPixel(ps.x-cur.x,ps.y-cur.y,RGB(0,0,0));
if(d==0)
{
choice=D;
}
else if(d < 0)
{
dh = 2*(d+cur.y)-1;
choice=dh>0?D:H;
}
else
{
dv = 2*(D-cur.x)-1;
choice=dv>0?D:V;
}
switch(choice)
{
case H:++cur.x;d=d+cur.x*2+1;break;
case D:++cur.x;--cur.y;d=d+(cur.x-cur.y+1)*2;break;
case V:--cur.y;d=d-cur.y*2+1;break;
}
}
}
作者博客: 点击打开链接