計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告(同名22852)_第1頁
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告(同名22852)_第2頁
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告(同名22852)_第3頁
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告(同名22852)_第4頁
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告(同名22852)_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告(同名22852)《計(jì)算機(jī)圖形學(xué)》實(shí)驗(yàn)報(bào)告《計(jì)算機(jī)圖形學(xué)》實(shí)驗(yàn)報(bào)告姓名:郭子玉學(xué)號:2012211632班級:計(jì)算機(jī)12-2班實(shí)驗(yàn)地點(diǎn):逸夫樓507實(shí)驗(yàn)時(shí)間:15.04.1015.04.17 intx; floaty; x=(int)X0; y=(float)Y0; while(x<=X1) { DrawPixel(x,round(y)); x++; y=y+k; } } else { if(Y0>Y1) { inttemp=Y0; Y0=Y1; Y1=temp; } floatx; inty; x=(float)X0; y=(int)Y0; while(y<=Y1) { DrawPixel(round(x),y); y++; x=x+1/k; } } return;}Mid_Bresenham算法voidCExperiment_Frame_OneView::Mid_Bresenham(intX0,intY0,intX1,intY1){ //-------請實(shí)現(xiàn)Mid_Bresenham算法-------// intD; intdx,dy; intx,y; dx=X1-X0; dy=Y1-Y0; x=X0; y=Y0; if(dx>dy) { D=dx-2*dy; while(x<=X1) { DrawPixel(x,y); if(D<0) { y=y+1; D=D+2*dx-2*dy; } else { D=D-2*dy; } x++; } } else { D=dy-2*dx; while(y<=Y1) { DrawPixel(x,y); if(D<0) { x=x+1; D=D+2*dy-2*dx; } else { D=D-2*dx; } y++; } } return;}運(yùn)行結(jié)果(1)DDA算法(2)Mid_Bresenham算法運(yùn)行結(jié)果分析DDA算法直觀,實(shí)現(xiàn)簡單。但是涉及浮點(diǎn)數(shù)運(yùn)算,不利于硬件實(shí)現(xiàn)。Mid_Bresenham算法比DDA算法簡單。兩種算法實(shí)現(xiàn)生成的直線也可能會(huì)有不同。實(shí)驗(yàn)心得通過實(shí)驗(yàn),學(xué)習(xí)掌握了兩種直線的掃描轉(zhuǎn)換算法。不同方法有不同的優(yōu)點(diǎn),實(shí)現(xiàn)結(jié)果也有可能不同。需要通過比較,確定哪種方法更優(yōu),更符合正確結(jié)果。實(shí)驗(yàn)二1實(shí)驗(yàn)?zāi)康暮鸵罄斫舛噙呅螔呙柁D(zhuǎn)換的原理;掌握典型多邊形掃描轉(zhuǎn)換算法;掌握步處理、分析實(shí)驗(yàn)數(shù)據(jù)的能力;編程實(shí)現(xiàn)基本X-掃描線轉(zhuǎn)換算法(必做);2實(shí)驗(yàn)環(huán)境和工具開發(fā)環(huán)境:VisualC++6.0實(shí)驗(yàn)平臺:Polygon_Conversion(自制平臺)3實(shí)驗(yàn)結(jié)果3.1程序流程圖X-掃描線轉(zhuǎn)換算法開始開始計(jì)算xmax,ymax計(jì)算xmax,ymax繪點(diǎn)繪點(diǎn)掃描線與各線段是否有交點(diǎn)掃描線與各線段是否有交點(diǎn)xx排序根據(jù)公式求交點(diǎn),記錄根據(jù)公式求交點(diǎn),記錄交點(diǎn)是否為線段的第一個(gè)頂點(diǎn)是交點(diǎn)是否為線段的第一個(gè)頂點(diǎn)判斷不同類型的頂點(diǎn),記錄交點(diǎn)否判斷不同類型的頂點(diǎn),記錄交點(diǎn)是3.2程序代碼/*********************************************************************功能:X-掃描線轉(zhuǎn)換算法參數(shù)說明: vertices[][2]---頂點(diǎn)列表 VertexNum---頂點(diǎn)數(shù)目備注:DrawPixel(intx,inty)--繪制像素點(diǎn)(x,y)**********************************************************************/voidCPolygon_ConversionView::X_Scan_Line_Conersion(intVertices[][2],intVertexNum){ intymax,ymin,count; floatk; ymax=Vertices[0][1]; ymin=Vertices[0][1]; for(intp=0;p<VertexNum;p++){//求y的最高點(diǎn)和最低點(diǎn) if(Vertices[p][1]>ymax)ymax=Vertices[p][1]; if(Vertices[p][1]<ymin)ymin=Vertices[p][1]; } intXn[100],i,ymax2,ymin2,temp; for(i=ymin;i<=ymax;i++){//求交點(diǎn) count=0; for(intj=0;j<VertexNum;j++) { if(j==(VertexNum-1)){//最后一個(gè)點(diǎn)和第一個(gè)點(diǎn)的線段 if(Vertices[j][1]>Vertices[0][1]){//線段的y最大值與最小值 ymax2=Vertices[j][1]; ymin2=Vertices[0][1]; } else{ ymax2=Vertices[0][1]; ymin2=Vertices[j][1]; } if((i<ymax2)&&(i>ymin2)){//判斷交點(diǎn)是否在線段上 k=(float)((float)(Vertices[j][0]-Vertices[0][0])/(float)(Vertices[j][1]-Vertices[0][1])); Xn[count]=(int)((k*(float)i-k*(float)Vertices[0][1]+(float)Vertices[0][0])+0.5); count++; } elseif(i==Vertices[j][1]){//掃描線經(jīng)過線段頂點(diǎn),只算前一個(gè)頂點(diǎn) if((Vertices[j-1][1]>i)&&(Vertices[0][1]>i)){ Xn[count]=Vertices[j][0]; count++; Xn[count]=Vertices[j][0]; count++; } elseif(((Vertices[j-1][1]<i)&&(Vertices[0][1]>i))||((Vertices[j-1][1]>i)&&(Vertices[0][1]<i))){ Xn[count]=Vertices[j][0]; count++; } } } else{//其他線段交點(diǎn) if(Vertices[j][1]>Vertices[j+1][1]){ ymax2=Vertices[j][1]; ymin2=Vertices[j+1][1]; } else{ ymax2=Vertices[j+1][1]; ymin2=Vertices[j][1]; } if((i<ymax2)&&(i>ymin2)){ k=(float)((float)(Vertices[j][0]-Vertices[j+1][0])/(float)(Vertices[j][1]-Vertices[j+1][1])); Xn[count]=(int)((k*(float)i-k*(float)Vertices[j+1][1]+Vertices[j+1][0])+0.5); count++; } elseif(i==Vertices[j][1]){//掃描線經(jīng)過線段頂點(diǎn),只算前一個(gè)頂點(diǎn) if(j!=0){//交點(diǎn)不為第一和最后一點(diǎn) if((Vertices[j-1][1]>i)&&(Vertices[j+1][1]>i)){ Xn[count]=Vertices[j][0]; count++; Xn[count]=Vertices[j][0]; count++; } elseif(((Vertices[j-1][1]<i)&&(Vertices[j+1][1]>i))||((Vertices[j-1][1]>i)&&(Vertices[j+1][1]<i))){ Xn[count]=Vertices[j][0]; count++; } else{} } else{//交點(diǎn)為第一點(diǎn) if((Vertices[VertexNum-1][1]>i)&&(Vertices[j+1][1]>i)){ Xn[count]=Vertices[j][0]; count++; Xn[count]=Vertices[j][0]; count++; } elseif(((Vertices[VertexNum-1][1]<i)&&(Vertices[j+1][1]>i))||((Vertices[VertexNum-1][1]>i)&&(Vertices[j+1][1]<i))){ Xn[count]=Vertices[j][0]; count++; } } } } } for(intm=0;m<count-1;m++){//交點(diǎn)x坐標(biāo)排序 for(intn=m+1;n<count;n++){ if(Xn[m]>Xn[n]){ temp=Xn[m]; Xn[m]=Xn[n]; Xn[n]=temp; } } } for(inta=0;a<count;a+=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論