




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、太原工業(yè)學院計算機工程系實 驗 報 告課程名稱計算機圖形學班級1320541實驗日期2015年6月4日星期四姓 名劉創(chuàng)學號37實驗成績實驗名稱 實驗四 地理劃分畫球算法實驗目的及要求1) 理解球邊表和面表算法2) 理解雙緩沖的算法3) 理解mfc作用原理實驗環(huán)境VC+6.0基于MFC實驗內容 利用mfc繪制地理球算法描述及實驗步驟部分重要代碼截圖:(用適當?shù)男问奖磉_算法設計思想與算法實現(xiàn)步驟)調試過程及實驗結果實驗過程中沒有出現(xiàn)太大的問題實驗結果展示如下: 地理球(詳細記錄在調試過程中出現(xiàn)的問題及解決方法。記錄實驗運行結果)總結1) 通過本次實驗,了解到了mfc的最基本知識,發(fā)現(xiàn)自己學習mfc
2、任重而道遠,在前行的路上還有很多學習的地方。2) 實踐是檢驗真理的唯一標準3) 動手能力需要再次提高4) 算法思想要與時俱進,要多學習算法(對實驗結果進行分析,實驗心得體會及改進意見)附錄附錄附錄附錄附錄/OnDraw函數(shù)void CTestView:OnDraw(CDC* pDC)CTestDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereDoubleBuffer();void CTestView:ReadVertex()/讀入頂點坐標int gAlpha=4,gBet
3、a=4;/面片夾角N1=180/gAlpha,N2=360/gBeta;/N1為緯度區(qū)域,N2為經度區(qū)域V=new CP3(N1-1)*N2+2;/V為球的頂點/緯度方向除南北極點外有"N11"個點,"2"代表南北極兩個點double gAlpha1,gBeta1,r=300;/r為球體半徑/計算北極點坐標V0.x=0,V0.y=r,V0.z=0;/按行循環(huán)計算球體上的點坐標for(int i=0;i<N1-1;i+)gAlpha1=(i+1)*gAlpha*PI/180;for(int j=0;j<N2;j+) gBeta1=j*gBeta
4、*PI/180;Vi*N2+j+1.x=r*sin(gAlpha1)*sin(gBeta1);Vi*N2+j+1.y=r*cos(gAlpha1);Vi*N2+j+1.z=r*sin(gAlpha1)*cos(gBeta1);/計算南極點坐標V(N1-1)*N2+1.x=0,V(N1-1)*N2+1.y=-r,V(N1-1)*N2+1.z=0;void CTestView:ReadFace()/讀入面表/設置二維動態(tài)數(shù)組F=new CFace *N1;/設置行for(int n=0;n<N1;n+)Fn=new CFaceN2;/設置列for(int j=0;j<N2;j+)/構造
5、北極三角形面片int tempj=j+1;if(tempj=N2) tempj=0;/面片的首尾連接int NorthIndex3;/北極三角形面片索引號數(shù)組NorthIndex0=0;NorthIndex1=j+1;NorthIndex2=tempj+1;F0j.SetNum(3);for(int k=0;k<F0j.vN;k+)F0j.vIk=NorthIndexk;for(int i=1;i<N1-1;i+)/構造球面四邊形面片for(int j=0;j<N2;j+) int tempi=i+1;int tempj=j+1;if(tempj=N2) tempj=0;in
6、t BodyIndex4;/球面四邊形面片索引號數(shù)組BodyIndex0=(i-1)*N2+j+1;BodyIndex1=(tempi-1)*N2+j+1;BodyIndex2=(tempi-1)*N2+tempj+1;BodyIndex3=(i-1)*N2+tempj+1;Fij.SetNum(4);for(int k=0;k<Fij.vN;k+)Fij.vIk=BodyIndexk;for(j=0;j<N2;j+)/構造南極三角形面片int tempj=j+1;if(tempj=N2) tempj=0;int SouthIndex3;/南極三角形面片索引號數(shù)組SouthInde
7、x0=(N1-2)*N2+j+1;SouthIndex1=(N1-1)*N2+1;SouthIndex2=(N1-2)*N2+tempj+1;FN1-1j.SetNum(3);for(int k=0;k<FN1-1j.vN;k+)FN1-1j.vIk=SouthIndexk;void CTestView:InitParameter()/透視變換參數(shù)初始化k1=sin(PI*Theta/180);k2=sin(PI*Phi/180);k3=cos(PI*Theta/180);k4=cos(PI*Phi/180);k5=k2*k3;k6=k2*k1;k7=k4*k3;k8=k4*k1;Vie
8、wPoint.x=R*k6;ViewPoint.y=R*k4;ViewPoint.z=R*k5;void CTestView:PerProject(CP3 P)/透視變換CP3 ViewP;ViewP.x=P.x*k3-P.z*k1;/觀察坐標系三維坐標ViewP.y=-P.x*k8+P.y*k2-P.z*k7;ViewP.z=-P.x*k6-P.y*k4-P.z*k5+R;ScreenP.x=d*ViewP.x/ViewP.z;/屏幕二維坐標系ScreenP.y=d*ViewP.y/ViewP.z;void CTestView:DoubleBuffer()/雙緩沖CDC* pDC=GetDC
9、();CRect rect;/定義客戶區(qū)GetClientRect(&rect);/獲得客戶區(qū)的大小pDC->SetMapMode(MM_ANISOTROPIC);/pDC自定義坐標系pDC->SetWindowExt(rect.Width(),rect.Height();/設置窗口范圍pDC->SetViewportExt(rect.Width(),-rect.Height();/x軸水平向右,y軸垂直向上pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2);/屏幕中心為原點CDC MemDC;/內存DCCBi
10、tmap NewBitmap,*pOldBitmap;/內存中承載圖像的臨時位圖MemDC.CreateCompatibleDC(pDC);/建立與屏幕pDC兼容的MemDC NewBitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height();/創(chuàng)建兼容位圖 pOldBitmap=MemDC.SelectObject(&NewBitmap); /將兼容位圖選入MemDC MemDC.FillSolidRect(&rect,pDC->GetBkColor();/按原來背景填充客戶區(qū),否則是黑色MemDC.SetMa
11、pMode(MM_ANISOTROPIC);/MemDC自定義坐標系MemDC.SetWindowExt(rect.Width(),rect.Height();MemDC.SetViewportExt(rect.Width(),-rect.Height();MemDC.SetViewportOrg(rect.Width()/2,rect.Height()/2);DrawObject(&MemDC);pDC->BitBlt(-rect.Width()/2,-rect.Height()/2,rect.Width(),rect.Height(),&MemDC,-rect.Wid
12、th()/2,-rect.Height()/2,SRCCOPY);/將內存位圖拷貝到屏幕MemDC.SelectObject(pOldBitmap);/恢復位圖NewBitmap.DeleteObject();/刪除位圖ReleaseDC(pDC);/釋放DCvoid CTestView:DrawObject(CDC *pDC)/繪制球面線框模型 CP2 Point33,t3;/南北極頂點數(shù)組CP2 Point44,t4;/球體頂點數(shù)組for(int i=0;i<N1;i+)for(int j=0;j<N2;j+)CVector ViewVector(VFij.vI0,ViewPo
13、int);/面的視矢量ViewVector=ViewVector.Normalize();/單位化視矢量Fij.SetFaceNormal(VFij.vI0,VFij.vI1,VFij.vI2);Fij.fNormal.Normalize();/單位化法矢量if(Dot(ViewVector,Fij.fNormal)>=0)/背面剔除if(3=Fij.vN)/三角形面片for(int m=0;m<Fij.vN;m+)PerProject(VFij.vIm);Point3m=ScreenP;for(int n=0;n<3;n+)if(0=n)pDC->MoveTo(Poi
14、nt3n.x,Point3n.y);t3=Point3n;elsepDC->LineTo(Point3n.x,Point3n.y);pDC->LineTo(t3.x,t3.y);/閉合多邊形else/四邊形面片for(int m=0;m<Fij.vN;m+)PerProject(VFij.vIm);Point4m=ScreenP;for(int n=0;n<4;n+)if(0=n)pDC->MoveTo(Point4n.x,Point4n.y);t4=Point4n;elsepDC->LineTo(Point4n.x,Point4n.y);pDC->L
15、ineTo(t4.x,t4.y);/閉合多邊形 void CTestView:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call defaultAlpha=5;Beta=5;tran.RotateX(Alpha);tran.RotateY(Beta);Invalidate(FALSE);CView:OnTimer(nIDEvent);BOOL CTestView:OnEraseBkgnd(CDC* pDC)/禁止背景刷新 / TODO: Add your message handler code here and/or call defaultreturn TRUE;void CTestView:OnInitialUpdate() CView:OnInitialUpdate();/ TODO: Add your specialized code here and/or call the base classReadVertex();ReadFace();tran.SetMat(V,(N1-1)*N2+2);InitParameter();void CTest
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 陜西職業(yè)技術學院《影視特效》2023-2024學年第一學期期末試卷
- 錦州市黑山縣2024-2025學年三年級數(shù)學第二學期期末學業(yè)質量監(jiān)測模擬試題含解析
- 南開大學《試驗設計與數(shù)據(jù)分析》2023-2024學年第二學期期末試卷
- 廣西電力職業(yè)技術學院《電視攝像基礎》2023-2024學年第二學期期末試卷
- 黔南民族醫(yī)學高等專科學?!渡锎蠓肿与p語》2023-2024學年第二學期期末試卷
- 工程資金計劃表模板范文
- 精油美容儀問卷調查
- 激光投影施工方案范本
- 管道盲探施工方案
- 山西定向穿越施工方案
- 電復律的護理查房
- 2024年貴州現(xiàn)代物流產業(yè)集團有限公司招聘筆試參考題庫含答案解析
- 20222023八下語文提優(yōu)輔導02(教師+學生)
- 共和國史(自己整理-僅供參考)
- 視頻監(jiān)控維保項目投標方案(技術標)
- NB-T 11076-2023 高壓交流故障電流限制器通用技術規(guī)范
- 整縣(市、區(qū))屋頂分布式光伏開發(fā)方案書-V5
- 透水磚鋪裝施工方案
- 《十步訊問法》讀書筆記
- GB/T 42599-2023風能發(fā)電系統(tǒng)電氣仿真模型驗證
- 質量問題解決方法之7鉆流程法
評論
0/150
提交評論