算法画圆 中点圆算法 计算机图形学
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
绠楁硶鐢诲渾涓偣鍦嗙畻娉?璁$畻
鏈哄浘褰㈠
Bresenham绠楁硶鐢诲渾涓偣鍦嗙畻娉曡绠楁満鍥惧舰瀛?010-12-02 20锛?8
///////////////////////////////////////////////////////////////// ///
//涓偣鍦嗘暣鏁扮畻娉曠敾鍦?/
///////////////////////////////////////////////////////////////// ////
void roundMid(int x1,int y1,int R,CDC*pDC)
{
int x=0,y=R锛?/p>
int d=1-R锛?/璧风偣(0,R),涓嬩竴鐐逛腑鐐?1,R-0.5),d=1*1+(R-
0.5)*(R-0.5)-R*R=1.25-R,d鍙弬涓庢暣鏁拌繍绠楋紝鎵€浠ュ皬鏁伴儴鍒嗗彲鐪佺暐
while(y x)//y x鍗崇涓€璞¢檺鐨勭2鍖哄叓鍒嗗渾
{
pDC-SetPixel(x+x1,y+y1,RGB(255,0,0))锛?/鍦嗗績(x1,y1),鐢荤偣鏃剁洿鎺ョ浉鍔犲钩绉?鐢?鍖?/p>
pDC-SetPixel(y+x1,x+y1,RGB(255,0,0))锛?/鐢?鍖?/p>
pDC-SetPixel(-x+x1,y+y1,RGB(255,0,0))锛?/鐢?鍖?/p>
pDC-SetPixel(-y+x1,x+y1,RGB(255,0,0))锛?/鐢?鍖?/p>
pDC-SetPixel(-x+x1,-y+y1,RGB(255,0,0))锛?/鐢?鍖?/p>
pDC-SetPixel(-y+x1,-x+y1,RGB(255,0,0))锛?/鐢?鍖?/p>
pDC-SetPixel(x+x1,-y+y1,RGB(255,0,0))锛?/鐢?鍖?/p>
pDC-SetPixel(y+x1,-x+y1,RGB(255,0,0))锛?/鐢?鍖?/p>
if(d 0)
d=d+2*x+3锛?/d鐨勫彉鍖?/p>
else
{
d=d+2*(x-y)+5锛?/d=0鏃?d鐨勫彉鍖?/p>
y--锛?/y鍧愭爣鍑?
}
x++锛?/x鍧愭爣鍔?
}
}
///////////////////////////////////////////////////////////////// ///
//Bresenham绠楁硶鐢诲渾//
///////////////////////////////////////////////////////////////// ////
void RoundBre(int x1,int y1,int R,CDC*pDC)
{
//鍦嗗績(x1,y1),褰撳墠鍍忕礌I(xi,yi),鍙冲儚绱燞(xi+1,y),鍙充笅鍍忕礌D(xi+1,yi-1),涓嬪儚绱燰(xi,yi-1)
int xi,yi,dd,m,n锛?/p>
//鍦嗗績璺濆樊鍊煎钩鏂筪h=(xi+1)*(xi+1)+yi*yi-R*R锛沝
d=(xi+1)*(xi+1)+(yi-1)*(yi-1)-R*R锛沝v=xi*xi+(yi-1)*(yi-1)-R*R
锛?/p>
xi=0锛?/璧风偣(0,R)
yi=R锛?/p>
dd=2-2*R锛?/璧风偣鐨勫彸涓嬪儚绱?1,R-1)鐨勫渾蹇冭窛宸€糳
d=1+(R-1)*(R-1)-R*R pDC-SetPixel(x1,y1,RGB(0,0,255))锛?/鐢诲渾蹇?璇佹槑鍦嗗績蹇呴』鍗犵敤涓€涓儚绱?/p>
while(yi=xi)//寰幆鍒板叓鍒嗕箣涓€鍦嗭紱yi=0鍗冲彲浠ョ敾鍑哄洓鍒嗗渾
{
pDC-SetPixel(xi+x1,yi+y1,RGB(255,0,0))锛?/2鍖?鍧愭爣骞崇Щ
(x1,y1)鐢诲渾
pDC-SetPixel(yi+x1,xi+y1,RGB(255,0,0))锛?/1鍖?/p>
pDC-SetPixel(-xi+x1,yi+y1,RGB(255,0,0))锛?/3鍖?/p>
pDC-SetPixel(-yi+x1,xi+y1,RGB(255,0,0))锛?/4鍖?/p>
pDC-SetPixel(-yi+x1,-xi+y1,RGB(255,0,0))锛?/5鍖?/p>
pDC-SetPixel(-xi+x1,-yi+y1,RGB(255,0,0))锛?/6鍖?/p>
pDC-SetPixel(xi+x1,-yi+y1,RGB(255,0,0))锛?/7鍖?/p>
pDC-SetPixel(yi+x1,-xi+y1,RGB(255,0,0))锛?/8鍖?/p>
if(dd 0)//D鍦ㄥ渾鍐咃紱H鍦ㄥ渾涓婃垨鍦嗗锛涢€夋嫨H鎴
朌,dh=0,dd 0,m=|dh|-|dd|=2*(dd+yi)-1锛?/p>
{
m=2*(dd+yi)-1锛?/p>
if(m=0)//鍙栧彸鍍忕礌H(xi+1,yi)锛沵=0鏃跺彇鍙崇偣
{
dd=dd+2*xi+3锛?/姹侶鐨勫彸涓嬪儚绱?xi+2,yi-
1),dd=(xi+2)*(xi+2)+(yi-1)*(yi-1)-R*R xi=xi+1锛?/p>
}
else//鍙栧彸涓嬪儚绱燚(xi+1,yi-1)
{
dd=dd+2*(xi-yi+3)锛?/姹侱鐨勫彸涓嬪儚绱?xi+2,yi-
2),dd=(xi+2)*(xi+2)+(yi-2)*(yi-2)-R*R xi=xi+1锛?/p>
yi=yi-1锛?/p>
}
}
else if(dd 0)//D鍦ㄥ渾澶栵紱V鍦ㄥ渾澶栨垨鍦嗕笂锛涢€夋嫨D鎴朧锛沝d 0,dv=0,n=|dd|-|dv|=2*(dd-xi)-1锛?/p>