




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)三圓的生成算法的實(shí)現(xiàn)班級(jí)08信計(jì)2班學(xué)號(hào)20080502054姓名曲凱歌分?jǐn)?shù)一、實(shí)驗(yàn)?zāi)康暮鸵?.理解圓生成的基本原理。2.掌握幾種常見(jiàn)的圓生成算法。3.利用VisualC++實(shí)現(xiàn)圓生成的中點(diǎn)畫(huà)圓算法。二、實(shí)驗(yàn)內(nèi)容1.利用中點(diǎn)畫(huà)圓算法、Bresenham畫(huà)圓法在屏幕上生成一整圓。2.利用中點(diǎn)算法畫(huà)一橢圓。三、實(shí)驗(yàn)步驟1.圓生成的基本原理(1)圓的特征圓的定義為到給定中心位置距離為的點(diǎn)集。圓心位于原點(diǎn)的圓有4條對(duì)稱軸:和。若已知圓弧上一點(diǎn),可以得到其關(guān)于4條對(duì)稱軸的其他7個(gè)點(diǎn),這種性質(zhì)稱為八對(duì)稱性。2.實(shí)現(xiàn)各種圓的生成算法,包括中點(diǎn)生成算法、Bresenham生成算法等。程序運(yùn)行后的菜單界面如圖所示。圓生成圖形的程序運(yùn)行界面首先創(chuàng)建工程名為“圓的生成算法的實(shí)現(xiàn)”的單文檔應(yīng)用程序框架,操作步驟如下:(1)創(chuàng)建單文檔應(yīng)用程序框架。啟動(dòng)VisualC++,選擇“文件/新建”菜單命令,在彈出的新建對(duì)話框中單擊“工程”標(biāo)簽;選擇.MFCAppWizard(exe),在“工程名稱”編輯框中輸入“圓的生成算法的實(shí)現(xiàn)”(也可以使用英文名稱),選擇所要存放的位置后,單擊“確定”按鈕,出現(xiàn)Stept1對(duì)話框;選擇“單個(gè)文檔”選項(xiàng),單擊“下一步”按鈕,在接著的Stept2~Stept5中,均可以直接單擊“下一步”按鈕完成應(yīng)用程序框架的構(gòu)建。也可以在Stept1步選擇“單文檔”(Singledocument)后,直接單擊“完成”按鈕完成。(2)添加菜單項(xiàng)及消息處理函數(shù)在工作區(qū)中的ResourceView標(biāo)簽中,單擊Menu項(xiàng)左邊的“+”,然后雙擊其子項(xiàng)IDR_M(jìn)AINFRAME,彈出編輯主菜單項(xiàng),根據(jù)表1中定義的菜單項(xiàng)資源來(lái)編輯菜單,利用MFCClassWizard為應(yīng)用程序添加與菜單項(xiàng)相關(guān)的消息處理函數(shù)。菜單標(biāo)題菜單項(xiàng)標(biāo)題菜單項(xiàng)ID消息消息處理函數(shù)圓的生成中點(diǎn)畫(huà)圓ID_MIDPOINTCIRCLECOMMANDOnMidpointcircleBresenham畫(huà)圓ID_BRESENHAMCIRCLECOMMANDOnBresenhamcircle橢圓的生成中點(diǎn)畫(huà)橢圓ID_MIDPOINTELLISPECOMMANDOnMidpointellispe表1生成圓和橢圓的菜單項(xiàng)資源及消息處理函數(shù)(3)添加程序代碼在CMyView.cpp文件中相應(yīng)的位置添加各算法的程序代碼,在VisualC++的MFC中繪制圖形,一般可以調(diào)用一個(gè)“CDC”類,從CDC開(kāi)始,添加代碼。中點(diǎn)算法畫(huà)圓。利用中點(diǎn)畫(huà)圓算法畫(huà)出圓心在、半徑為R的圓,其VC程序設(shè)計(jì)代碼如下:voidCMyView::OnMidpointcircle(){ CDC*pDC=GetDC(); intx0=150,y0=120,r=100,color=RGB(0,0,255),x,y,d; x=0; y=r; d=1-r; pDC->SetPixel(x,y,color); while(x<=y) { if(d<0)d+=2*x+3; else{d+=2*(x-y)+5;y--;} x++; pDC->SetPixel(x+x0,y+y0,color); pDC->SetPixel(-x+x0,y+y0,color); pDC->SetPixel(-x+x0,-y+y0,color); pDC->SetPixel(x+x0,-y+y0,color); pDC->SetPixel(y+x0,x+y0,color); pDC->SetPixel(-y+x0,x+y0,color); pDC->SetPixel(-y+x0,-x+y0,color); pDC->SetPixel(y+x0,-x+y0,color); } ReleaseDC(pDC);}Bresenham算法畫(huà)圓。利用Bresenham畫(huà)圓算法畫(huà)出圓心在、半徑為R的圓,其VC程序設(shè)計(jì)代碼如下:voidCMyView::OnBresenhamcircle(){ CDC*pDC=GetDC(); intx0=100,y0=100,x,y,r=80,c=0; floate,d; e=3-2*r; x=0; y=r; while(x<=y) { if(e<0){e=e+4*x+6;x++;} else{e=e+4*(x-y)+10;x++;y--;} pDC->SetPixel(x+x0,y+y0,c); pDC->SetPixel(-x+x0,y+y0,c); pDC->SetPixel(-x+x0,-y+y0,c); pDC->SetPixel(x+x0,-y+y0,c); pDC->SetPixel(y+x0,x+y0,c); pDC->SetPixel(-y+x0,x+y0,c); pDC->SetPixel(-y+x0,-x+y0,c); pDC->SetPixel(y+x0,-x+y0,c); } ReleaseDC(pDC);}中點(diǎn)算法畫(huà)橢圓。設(shè)中心在,長(zhǎng)半軸為,短半軸為。其VC程序設(shè)計(jì)代碼如下:voidCMyView::OnMidpointellispe(){ CDC*pDC=GetDC(); intx0=200,y0=100,a=120,b=60,x,y,color=100; floatd1,d2; x=0; y=b; d1=b*b+a*a*(-b+0.25); pDC->SetPixel(x+x0,y+y0,color); pDC->SetPixel(-x+x0,-y+y0,color); pDC->SetPixel(-x+x0,y+y0,color); pDC->SetPixel(x+x0,-y+y0,color); while(b*b*(x+1)<a*a*(y-0.5)) { if(d1<=0){d1+=b*b*(2*x+3);x++;} else{d1+=b*b*(2*x+3)+a*a*(-2*y+2);x++;y--;} pDC->SetPixel(x+x0,y+y0,color); pDC->SetPixel(-x+x0,-y+y0,color); pDC->SetPixel(-x+x0,y+y0,color); pDC->SetPixel(x+x0,-y+y0,color); } d2=b*b*(x+0.5)*(x+0.5)+a*a*(y-1)*(y-1)-a*a*b*b; while(y>0) { if(d2<=0){d2+=b*b*(2*x+2)+a*a*(-2*y+3);x++;y--;} else{d2+=a*a*(-2*y+3);y--;} pDC->SetPixel(x+x0,y+y0,color); pDC->SetPixel(-x+x0,-y+y0,color); pDC->SetPixel(-x+x0,y+y0,color); pDC->SetPixel(x+x0,-y+y0,color); } ReleaseDC(pDC);}四、實(shí)驗(yàn)結(jié)果分析調(diào)試是程序成功后,運(yùn)行結(jié)果如下:中點(diǎn)算法生成的圓(藍(lán)色圓弧)如圖3-2,Bresenham算法生成的圓(黑色圓弧)如圖3-3,中點(diǎn)算法生成的橢圓如圖3-4。圖3-2中點(diǎn)法畫(huà)圓效果圖圖3-3Bresenham算法畫(huà)圓效果圖圖3-4中點(diǎn)法畫(huà)橢圓效果圖其中中點(diǎn)畫(huà)圓法實(shí)現(xiàn)原理:構(gòu)造圓函數(shù),并構(gòu)造判別式:。若,則應(yīng)取為下一像素,而且再下一像素的判別式為:。若,則應(yīng)取為下一像素,而且下一像素的判別式為:。這里討論的是按順時(shí)針?lè)较蛏傻诙€(gè)八分圓,則第一個(gè)像素是,判別式的初始值。而B(niǎo)resenham畫(huà)圓法與中點(diǎn)畫(huà)圓算法類似,考慮圓心在原點(diǎn),半徑為的8分圓,取為起點(diǎn),按順時(shí)針?lè)较蛏蓤A。在這種情況下,從開(kāi)始,每
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 某自治縣工貿(mào)行業(yè)領(lǐng)域重大隱患督導(dǎo)檢查工作方案
- 收費(fèi)站應(yīng)聘班長(zhǎng)演講稿
- 人生規(guī)劃課件
- 政府人才公寓回購(gòu)協(xié)議書(shū)
- 大興工廠飯?zhí)贸邪鼌f(xié)議書(shū)
- 小區(qū)消防現(xiàn)場(chǎng)施工協(xié)議書(shū)
- 學(xué)校蔬菜配送安全協(xié)議書(shū)
- 員工簽訂保護(hù)客戶協(xié)議書(shū)
- 咨詢服務(wù)業(yè)務(wù)合同范本
- 4s店財(cái)產(chǎn)保險(xiǎn)協(xié)議書(shū)
- 田畝轉(zhuǎn)戶協(xié)議書(shū)
- 2025年MySQL開(kāi)發(fā)趨勢(shì)試題及答案研究
- 違約就業(yè)協(xié)議書(shū)
- 《人工智能通識(shí)導(dǎo)論(慕課版)》全套教學(xué)課件
- 烘培創(chuàng)業(yè)合伙協(xié)議書(shū)
- 2025年信息系統(tǒng)管理知識(shí)考試試題及答案
- 馬法理學(xué)試題及答案
- 2025年全國(guó)保密教育線上培訓(xùn)考試試題庫(kù)附完整答案(奪冠系列)含答案詳解
- 視頻制作拍攝服務(wù)方案投標(biāo)文件(技術(shù)方案)
- 量子計(jì)算中的量子比特穩(wěn)定性研究-全面剖析
- 構(gòu)建健全企業(yè)資金體系
評(píng)論
0/150
提交評(píng)論