中點演算法畫圓

2022-10-06 03:00:06 字數 1801 閱讀 1888

為了能以任意點為圓心畫圓,我們可以把圓心先設為視點(相當於於將其平移到座標原點),然後通過中點法掃瞄轉換後,再恢復原來的視點(相當於將圓心平移回原來的位置)。

圓心位於原點的圓有四條對稱軸x=0,y=0,x=y和x=-y,從而圓上一點(x,y),可得到其關於四條對稱軸的七個對稱點,這稱為八對稱性,下面的函式就用來顯示(x,y)及其七個對稱點.

void circlepoints(int x,int y,long color,cdc *pdc)

中點畫圓演算法就是每部單位間隔取樣並且計算離圓最近的位置。在繼續之前,我這裡補充乙個關於圓對稱性的知識點,通過在圓中計算考慮使用對稱性計算開銷可以減小到原來的1/8。對稱性質原理:

(1)圓是滿足x軸對稱的,這樣只需要計算原來的1/2點的位置;

(2)圓是滿足y軸對稱的,這樣只需要計算原來的1/2點的位置;

(3)圓是滿足y = x or y = -x軸對稱的,這樣只需要計算原來的1/2點的位置;

通過上面三個性質分析得知,對於元的計算只需要分析其中1/8的點即可。

例如:分析出來目標點(x,y)必然存在(x,-y),(-x,y),(-x,-y),(y,x),(y,-x),(-y,x),(-y,-x)的另外7個點。

關於中心畫圓演算法,通過計算x = 0到 x = y的1/8圓的範圍,然後通過對稱原理得到其他7/8個點的資訊。

這裡和bresenham演算法有很多相似之處,同樣有乙個決定下乙個位置的關鍵值p來做權衡處理。

在中點畫圓演算法中,通過平移的方法將假設圓心在座標原點,然後計算,最後再平移到真實原心位置。

如果我們建構函式 f(x,y)=x2+y2-r2,則對於圓上的點有f(x,y)=0,對於圓外的點有f(x,y)>0,對於圓內的點f(x,y)<0 。與中點畫線法一樣,構造判別式:

d=f(m)=f(xp+1,yp-0.5)=(xp+1)2+(yp-0.5)2-r2

若 d<0,則應取p1為下一象素,而且再下一象素的判別式為:

d=f(xp+2,yp-0.5)=(xp+2)2+(yp-0.5)2-r2=d+2xp+3

若d≥0,則應取p2為下一象素,而且下一象素的判別式為

d=f(xp+2,yp-1.5)=(xp+2)2+(yp-1.5)2-r2=d+2(xp-yp)+5

我們這裡討論的第乙個象素是(0,r),判別式d的初始值為:

d0=f(1,r-0.5)=1.25-r

中點畫圓演算法內容:

1,輸入圓心位置和圓的半徑,得到圓周上的第乙個點point1;

(假設起始點為座標原點,後面將通過座標平移來處理非圓心在圓點)

2,計算決策關鍵引數的初始值,p = 5/4 - r;

3,在每個xn的位置,從n = 0開始,更具決策值p來判斷:

如果p<0,下乙個點的位置為(xn+1,yn);

並且執行p = p + 2*x+3;

如果p>=0,下乙個點的位置為(xn+1,yn-1);

並且執行p = p + 2.0*(x-y)+5;

4,通過對稱原理計算其他7個對稱相關點;

5,移動座標到圓心點(x1,y1)

x = x + x1;

y = y + y1;

6,如果x程式如下:

void circle::draw(cdc *pdc)

int x,y;

double p;

pdc->setviewportorg(pmid);

x=0;

y=radis;

p=1.25-radis;

while(x<=y+1)

else

p+=2*x+3;

}pdc->setviewportorg(0,0);}

6 1會計點演算法 答案

1 計算機網路的最大優點是 本題分數 1.0分 a 集中管理與控制 b 速度提高 c 增大容量 d 共享資源 正確答案 d 答題解析 計算機網路具有多方面的作用 資源共享 資訊傳送 分布式處理。2 將a3設定為當前單元格,單擊 插入 選單中的 行 命令後,空行將新增在a3的 本題分數 1.0分 a ...

北京造價員實務考試知識點演算法彙總

2011年北京造價員實務小結 一 箋注面積及相應定額列項 注意 1 找到外牆外邊線,以外邊線為界去 2 如遇到不規則的圖形,加法和減法都要算一遍 注意 土方工程中的平整場地的工程量按s 1.4 首層建築面積計算 二 門窗工程 注意 參照門窗表計算單個門窗的框外圍面積 參照平面圖計算各種門窗的個數 注...