中點畫圓法
一、算法原理
利用圓的對稱性,只須討論1/8圓,即下圖第二個8分圓區域:
- 假設P(x,y)爲當前像素,下一個像素可能是正右方P1(x+1,y)或右下方P2(x+1,y−1),如上圖所示。
- 設M爲P1、P2間的中點,即M的座標爲(x+1,y−0.5)。若M在圓內,則P1靠近圓弧,應該取爲下一像素,否則應取P2。
二、公式推導
- 構造函數:F(x,y)=x^2 + y ^2 - R^2$ ,則有:
F(x,y)=0(x,y)在圓上F(x,y)<0(x,y)在圓內F(x,y)>0(x,y)在圓外
- 帶入M座標,有如下結論:
F(M)<0 M在圓內,取P1
F(M)≥0 M在圓外,取P2
爲此,可採用如下判別式:
d=F(M)=F(x+1,y−0.5)=(x+1)2+(y−0.5)2−R2
- 若d<0,則P1 爲下一個像素,那麼再下一個像素的判別式爲:
d1=F(x+2,y−0.5)=(x+2)2+(y−0.5)2−R2=d+2x+3
即,d的增量爲2x+3
- 若d≥0,則P2 爲下一個像素,那麼再下一個像素的判別式爲:
d2=F(x+2,y−1.5)=(x+2)2+(y−1.5)2−R2=d+(2x+3)+(−2y+2)=d+2(x−y)+5
即,d的增量爲2(x−y)+5
- d的初值
d0=F(1,R−0.5)=1+(R−0.5)2−R2=1.25−R
三、改進優化
爲了擺脫d0的浮點數運算,使整個算法全部使用整數運算,用e0=d0−0.25,則有x0=0,y0=R,d0=1−R。那麼,中點畫圓算法的遞推公式如下:(i=0,1,2,⋯,直至x>y爲止)
dd<0,di+1=di+2xi+3,xi+1=xi+1≥0,di+1=di+2(xi−yi)+5,xi+1=xi+1,yi+1=yi−1