1 Breasenham算法
1.1 它的基本方法是从一个起点出发,利用判别式选择下一个显示点
1.2 算法原理:
假设圆心的坐标位于坐标原点,位于第一项限的1/8圆弧p1p2,它可以用方程画出:
算法的每一步都选择一个离开理想圆周最近的点Pi(Xi,Yi)让他的误差项每一步都是最小的.
Pi-1(Xi-1,Yi-1)是已经确定为最靠近圆弧的点,下一步x=xi-1+1时,要决定取T还是S更好.
很明显,|D(s)|>=|D(T)|,也就是所di>0的时候选择T点,不然选择S点.
将di作为判别式,咱们推导一下他的递推公式:
1.3 算法描述
void drawcircle(int r)
{
//从原点开始画
int x,y,d;
x=0;
y=r;
d=3-2*r;
while(x<y)
{
plot(x,y);
if(d<0)
{
d=d+4*x+6;
}
else
{
d=d+4*(x-y)+10;
y=y-1;
}
x=x+1;
}
//如果半径是0,那就只需要画一个点
if(x==y)
{
plot(x,y);
}
}
可以利用这个算法的1/8圆弧对称扩展成一个完整的圆