計算機圖形學實驗報告(同名22852)_第1頁
計算機圖形學實驗報告(同名22852)_第2頁
計算機圖形學實驗報告(同名22852)_第3頁
計算機圖形學實驗報告(同名22852)_第4頁
計算機圖形學實驗報告(同名22852)_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

計算機圖形學實驗報告(同名22852)《計算機圖形學》實驗報告《計算機圖形學》實驗報告姓名:郭子玉學號:2012211632班級:計算機12-2班實驗地點:逸夫樓507實驗時間: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){ //-------請實現(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;}運行結果(1)DDA算法(2)Mid_Bresenham算法運行結果分析DDA算法直觀,實現(xiàn)簡單。但是涉及浮點數(shù)運算,不利于硬件實現(xiàn)。Mid_Bresenham算法比DDA算法簡單。兩種算法實現(xiàn)生成的直線也可能會有不同。實驗心得通過實驗,學習掌握了兩種直線的掃描轉換算法。不同方法有不同的優(yōu)點,實現(xiàn)結果也有可能不同。需要通過比較,確定哪種方法更優(yōu),更符合正確結果。實驗二1實驗目的和要求理解多邊形掃描轉換的原理;掌握典型多邊形掃描轉換算法;掌握步處理、分析實驗數(shù)據(jù)的能力;編程實現(xiàn)基本X-掃描線轉換算法(必做);2實驗環(huán)境和工具開發(fā)環(huán)境:VisualC++6.0實驗平臺:Polygon_Conversion(自制平臺)3實驗結果3.1程序流程圖X-掃描線轉換算法開始開始計算xmax,ymax計算xmax,ymax繪點繪點掃描線與各線段是否有交點掃描線與各線段是否有交點xx排序根據(jù)公式求交點,記錄根據(jù)公式求交點,記錄交點是否為線段的第一個頂點是交點是否為線段的第一個頂點判斷不同類型的頂點,記錄交點否判斷不同類型的頂點,記錄交點是3.2程序代碼/*********************************************************************功能:X-掃描線轉換算法參數(shù)說明: vertices[][2]---頂點列表 VertexNum---頂點數(shù)目備注:DrawPixel(intx,inty)--繪制像素點(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的最高點和最低點 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++){//求交點 count=0; for(intj=0;j<VertexNum;j++) { if(j==(VertexNum-1)){//最后一個點和第一個點的線段 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)){//判斷交點是否在線段上 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)過線段頂點,只算前一個頂點 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{//其他線段交點 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)過線段頂點,只算前一個頂點 if(j!=0){//交點不為第一和最后一點 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{//交點為第一點 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++){//交點x坐標排序 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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論