Tauruser

Enjoy Every Day
posts - 34, comments - 95, trackbacks - 0, articles - 5
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Bresenham画圆法

Posted on 2006-03-13 09:28 Tauruser 阅读(4865) 评论(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的*+-运算就搞掂了一个圆的绘制。

Feedback

# re: Bresenham画圆法  回复  更多评论   

2007-05-01 12:50 by adni

# re: Bresenham画圆法  回复  更多评论   

2007-06-01 21:41 by Cray
这好象只是中点画圆法...并非真正的Bresenham画圆方法。

# re: Bresenham画圆法  回复  更多评论   

2007-11-16 23:03 by supermary
不错.

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理