Posted on 2006-03-13 09:28
Tauruser 阅读(5278)
评论(3) 编辑 收藏 引用 所属分类:
计算机图形学
上个学期考过的CAD,要用C/C++写一个Bresenham画圆算法,结果没看过书,一点都不会,在考场上凭自己对Bresenham是微元法的特例这点理解,乱写一通。考试过后,去图书馆一翻书,才发现我写的和原本的Bresenham完全不一样,Bresenham法画圆是如果的优雅,令我不得不惊叹。
void Bresenham_Circle(int xc,int yc,int r)
{
int x,y,d;
y=r;
d=3-2*r;
x=0;
while(x<=y)
{
plotC(x,y,xc,yc)
if(d<0)
d+=4*x+6;
else
{
d+=4*(x-y)+10;
y=y-1;
}
x=x+1;
}
}
void plotC(int x,int y,int xc,int yc)
{
putpixel(xc+x,yc+y);
putpixel(xc+x,yc-y);
putpixel(xc-x,yc+y);
putpixel(xc-x,yc-y);
putpixel(xc+y,yc+x);
putpixel(xc+y,yc-x);
putpixel(xc-y,yc+x);
putpixel(xc-y,yc-x);
} 其中:(xc,yc)为圆心坐标。r为圆的半径。此算法完全不涉及浮点运算,单是用int的*+-运算就搞掂了一个圆的绘制。