




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、計(jì)算機(jī)圖形學(xué)直線三種算法1實(shí)驗(yàn)?zāi)康模和ㄟ^實(shí)驗(yàn),進(jìn)一步理解直線段掃描轉(zhuǎn)換的DDA算法、中點(diǎn)畫線自算法及bresenham算法的基本原理,掌握以上算法生成直線段的基本過程。通過編程,掌握在C/C+環(huán)境下完成用DDA算法、中點(diǎn)畫線算法及bresenham算法對(duì)任意直線段的掃描轉(zhuǎn)換,以及在C/C+環(huán)境下完成用中點(diǎn)畫圓及橢圓的繪制方法。2.實(shí)驗(yàn)內(nèi)容:閱讀openGL三維程序設(shè)計(jì)(電子書)第二部分第四章,掌握OpenGL基本建模方法,并調(diào)試其中程序。參考教材第6章,編程實(shí)現(xiàn)整數(shù)DDA算法、中點(diǎn)畫線法和Bresenham畫線法,繪制直線(直線寬度和線型可自定)。DDA直線生成:算法原理:DDA直線生成算法描
2、述:給定一直線起始點(diǎn)(xO,yO)和終點(diǎn)(x1,y1)。分別計(jì)算dx=x1-x0,dy=y1-y0。計(jì)算直線的斜率k=dy/dx。當(dāng)|k|1時(shí)轉(zhuǎn)向3);當(dāng)|k|=1時(shí),轉(zhuǎn)向4);當(dāng)x每次增加1時(shí),y增加k。即(xi,yi)T(xi+1,yi+k)。直到xi增加到x1。并且每次把得到的坐標(biāo)值利用系統(tǒng)函數(shù)掃描顯示出來(lái)。但要注意對(duì)/坐標(biāo)要進(jìn)行int(y+0.5)取整運(yùn)算。結(jié)束。對(duì)y每次增加1時(shí),x增加1/k,卩(xi,yi)T(xi+1/k,yi+1)。直到y(tǒng)i增加到y(tǒng)1.并且每次把得到的坐標(biāo)值利用系統(tǒng)函數(shù)掃描顯示出來(lái)。但要注意對(duì)fabs(dy)steps=fabs(dx);elsesteps=fa
3、bs(dy);xIncrement=float(dx)/float(steps);NYStartn=0X(n)0.5則卻右上方點(diǎn)p2,否則取正右方點(diǎn)pl。取直線初始點(diǎn)(xO,yO),dx=x1-x0,dy=y1-y0,e=-dx并且將當(dāng)前點(diǎn)掃描并顯示;若e0,則下一點(diǎn)掃描值為(x=x+1,y=y+1)并且e=e+2*dy,轉(zhuǎn)向2)直到x=x1,轉(zhuǎn)向4);若exEnd)x=xEnd;y=yEnd;xEnd=x0;elsex=x0;y=y0;while(xx+;if(p0)p+=twoDy;elsey+;p+=twoDyMinusDx;glBegin(GL_POINTS);glVertex2i(x
4、,(int)(y+0.5);glEnd();glFlush();voidmyDisplay(void)glClear(GL_COLOR_BUFFER_BIT);glColor3f(0.0,0.0,1.0);lineBres(40,40,150,150);voidmain(intargc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(50,100);glutInitWindowSize(400,400);glutCreateWindow(Hello);
5、init();glutDisplayFunc(myDisplay);glutMainLoop();2.2.4實(shí)驗(yàn)結(jié)果:2.3中點(diǎn)畫線生成:2.3.1中點(diǎn)畫線算法原理:算法基本思想:假設(shè)與圓弧最近的點(diǎn)P(x,y)像素點(diǎn)已經(jīng)確定,那么,下一個(gè)像素點(diǎn)只能是其正右方點(diǎn)P1(x+1,y)或者右下方的點(diǎn)P2(x+1,y-1)兩者之一。所以類比中點(diǎn)畫直線發(fā)的思想取這兩個(gè)點(diǎn)的中點(diǎn)M(x+1,y-0.5)帶入圓系方程入圓系方程F(x,y)=xA2+yA2-rA2o顯然如果F(M)0,則說明M點(diǎn)位于圓方程之內(nèi),則應(yīng)取P1為下一像素點(diǎn)。反之應(yīng)該取P2為下一像素點(diǎn)。注:只就圓的八分之一進(jìn)行討論,其它的各點(diǎn)可以利用直線
6、和坐標(biāo)軸進(jìn)行對(duì)稱變換得到,只需掃描顯示即可。具體算法如下:輸入圓心位置和圓的半徑作為圓周上的第一點(diǎn)P(0,R);計(jì)算決策關(guān)鍵參數(shù)的初始值di=dO=1.25-R在每個(gè)初始點(diǎn)(xi,yi)=(0,R),根據(jù)決策參數(shù)判斷下一點(diǎn)的位置,具體如下:如果di0,下一個(gè)像素點(diǎn)的位置(xi+1,yi-1)并且di+1=di+2.0*(xi-yi)+5。將經(jīng)過判斷后的結(jié)果賦值給新的(xi,yi),轉(zhuǎn)至3);直到xy為止,轉(zhuǎn)向4);算法結(jié)束,退出執(zhí)行。2.3.1中點(diǎn)畫線流程圖:2.3.2中點(diǎn)畫線關(guān)鍵代碼:#include#include#include#includeintx1,y1,x2,y2;voidIni
7、tGL(void)auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);auxInitPosition(0,0,640,480);auxInitWindow(FirstAuxOpenGLDemo);glClearColor(0.6,0.6,0.6,0.0);glClear(GL_COLOR_BUFFER_BIT);voidMidpointLine(intx1,inty1,intx2,inty2)inti,x,y;floatdx,dy,d,k;dx=x2-x1;dy=y2-y1;k=dy/dx;if(k=1)d=0.5-k;x=x1;y=y1;glVertex2i(x1
8、,y1);for(i=1;i=dx;i+)glBegin(GL_POINTS);glVertex2i(x,y);x+;if(d1)d=1-0.5*k;x=x1;y=y1;glVertex2i(x1,y1);for(i=1;i=dy;i+)glBegin(GL_POINTS);glVertex2i(x,y);y+;if(d0)x+;d=d+1;elsed=d-k+1;Sleep(10);glEnd();/結(jié)束繪制glFlush();進(jìn)行刷新voidCALLBACKDraw(void)/glBegin(GL_POINTS);MidpointLine(x1,y1,x2,y2);/glEnd();/結(jié)
9、束繪制/glFlush();/進(jìn)行刷新voidmain(void)printf(pleaseinputthestartpoint(x1,y1):);scanf(%d,%d,&x1,&y1);printf(pleaseinputthestartpoint(x2,y2):);scanf(%d,%d,&x2,&y2);lnitGL();初始化auxMainLoop(Draw);/進(jìn)行繪制2.3.3實(shí)驗(yàn)結(jié)果:2.3.4算法分析與比較:DDA算法簡(jiǎn)單,實(shí)現(xiàn)容易,但由于在循環(huán)中涉及實(shí)型數(shù)的運(yùn)算,因此生成直線的速度較慢oBresenham畫線算法僅僅使用增量整數(shù)計(jì)算,計(jì)算相對(duì)DDA較快,中點(diǎn)圓畫線同那個(gè)Bresenham畫線算法一樣,中點(diǎn)方法使用整數(shù)加減來(lái)計(jì)算沿圓周的像素位置,計(jì)算比DDA復(fù)雜但計(jì)算速度快!2.3.5總結(jié):在本次實(shí)驗(yàn)開始之前,了解vc畫圖知識(shí)不多,所以前期準(zhǔn)備工作量很大,加之剛開始接觸圖形學(xué)的知識(shí),應(yīng)用不是很熟練。經(jīng)過大致一周的算法研究和相關(guān)的準(zhǔn)備工作,才使得實(shí)驗(yàn)得以完成。印象深刻的是在
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 跨領(lǐng)域合作在提升藥品安全水平中的價(jià)值
- 建設(shè)工程招標(biāo)代理機(jī)構(gòu)學(xué)習(xí)情境一建設(shè)工程承發(fā)包與招投標(biāo)認(rèn)知課件
- 漯河醫(yī)學(xué)高等??茖W(xué)?!禡SOffice高級(jí)應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 武漢城市學(xué)院《機(jī)器人系統(tǒng)開發(fā)》2023-2024學(xué)年第二學(xué)期期末試卷
- 江蘇省睢寧縣姚集中學(xué)2024-2025學(xué)年小學(xué)六年級(jí)數(shù)學(xué)畢業(yè)檢測(cè)指導(dǎo)卷含解析
- 閑置礦山出租合同范本
- 跨境電商平臺(tái)技術(shù)架構(gòu)與運(yùn)營(yíng)效率提升
- 河北省邢臺(tái)市巨鹿縣2025年數(shù)學(xué)三下期末達(dá)標(biāo)檢測(cè)試題含解析
- 高效英語(yǔ)學(xué)習(xí)法全面提升口語(yǔ)與聽力水平
- 瀘州職業(yè)技術(shù)學(xué)院《社會(huì)統(tǒng)計(jì)學(xué)實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 橋面鋪裝三維激光攤鋪施工工法
- 優(yōu)質(zhì)課一等獎(jiǎng)小學(xué)綜合實(shí)踐《我也能發(fā)明》課件
- 部編人教版三年級(jí)下冊(cè)語(yǔ)文:荷花課件
- 螺紋牙強(qiáng)度校核計(jì)算
- 關(guān)于在生產(chǎn)過程中物料流轉(zhuǎn)的交接和管理規(guī)定
- 手槍的基礎(chǔ)射擊演示文稿
- 浮針療法的學(xué)習(xí)課件
- XX學(xué)院社團(tuán)指導(dǎo)老師學(xué)期考核表
- 獸醫(yī)外科手術(shù)學(xué)與獸醫(yī)外科學(xué)章節(jié)測(cè)試及答案
- 德能勤績(jī)量化考核表
- GB/T 6545-1998瓦楞紙板耐破強(qiáng)度的測(cè)定法
評(píng)論
0/150
提交評(píng)論