正负法:
算法原理:
圆的方程为:F(x,y)=0;
当点(x,y)在圆内时,有F(x,y)<0;若在圆外,则反之
取P0(x,y)为A点,也就是所,我们可以求出Pi的点,然后接着找下一个点,方法是:
当Fi(xi,yi)<0时往圆外方向走,也就是
Xi+1=Xi + 1,
Y+1=Yi,
反之,则往园内走:
Xi+1=Xi,
Y+1=Yi - 1,
我们推导一下递推公式:
将F0初始化为0
得出结论:
当Fi<0时:
当Fi>0时:
算法描述:
void drawcircle2(int r,int xc,int yc)
{
int x=xc,y=yc,f=0;
while(y>yc)
{
plot(x,y);
if(f>0)
{
f=f-2*(y-yc)+1;
y--;
}
else
{
f=f+2*(y-yc)+1;
x++;
}
}
if(y=yc)
{
plot(x,y);
}
}