Posted on 2006-03-13 09:28
Tauruser 閱讀(5294)
評論(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的*+-運算就搞掂了一個圓的繪制。