計(jì)算機(jī)圖形學(xué)_第1頁
計(jì)算機(jī)圖形學(xué)_第2頁
計(jì)算機(jī)圖形學(xué)_第3頁
計(jì)算機(jī)圖形學(xué)_第4頁
計(jì)算機(jī)圖形學(xué)_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、計(jì)算機(jī)圖形學(xué)計(jì)算機(jī)圖形學(xué)14/14計(jì)算機(jī)圖形學(xué)精選文檔計(jì)算機(jī)圖形學(xué)投影變換姓名:學(xué)號(hào):班級(jí):一大班二小班.精選文檔一、實(shí)現(xiàn)目標(biāo)將屏幕垂直區(qū)分為兩部分,左半部分繪制三維坐標(biāo)系和長方體,右半部分繪制二維坐標(biāo)系及三視圖。第一設(shè)置成長方體,在繪制繪制三視圖二、算法設(shè)計(jì)在屏幕左半部分繪制三維坐標(biāo)系。在屏幕右半部分繪制二維坐標(biāo)系。讀入長方體的三維極點(diǎn)齊次坐標(biāo)及其面坐標(biāo),并將三維極點(diǎn)齊次坐標(biāo)變換為相應(yīng)的屏幕二維齊次坐標(biāo),并在屏幕左半部分繪制長方體。分別給主視圖、俯視圖和側(cè)視圖變換矩陣的非零元素賦值。將原始圖形的極點(diǎn)會(huì)合齊次坐標(biāo)矩陣和三視圖變換矩陣相乘,結(jié)果恩賜變換后的三視圖極點(diǎn)會(huì)合齊次坐標(biāo)矩陣。此中,主視圖

2、變換矩陣為:俯視圖變換矩陣為:.精選文檔主視圖變換矩陣為:依據(jù)變換后的極點(diǎn)會(huì)合齊次坐標(biāo)矩陣的元素繪制三視圖。三、源代碼及說明Group7View.h文件lassCMygroup7View:publicCViewCMygroupView();DECLARE_DYNCREATE(CMygroupView)Attributespublic:CMygroup7Doc*GetDocument();Operationspublic:intViewKind;OverridesClassWizardgeneratedvirtualfunctionoverrides/AFX_VIRTUAL(CMygroup7V

3、iew)public:virtualvoidOnDraw(CDC*pDC);/overriddentodrawthisviewvirtualBOOLPreCreateWindow(CREATESTRUCT&cs);protected:virtualBOOLOnPreparePrinting(CPrintInfo*pInfo);virtualvoidOnBeginPrinting(CDC*pDC,CPrintInfo*pInfo);virtualvoidOnEndPrinting(CDC*pDC,CPrintInfo*pInfo);/AFX_VIRTUAL.精選文檔Implementationp

4、ublic:voidClearMatrix(doubleA44);/除掉矩陣函數(shù)voidCalculate(doubleP4,doubleT4);/兩個(gè)矩陣相乘函數(shù)doublePt3D84;doublePt2D82;intMaxY;intMaxX;intFt65;voidTransform3DTo2D(constdoubleP3D4,doubleP2D2,constintn);/三維變二維函數(shù)voidReadPoint();/讀入極點(diǎn)坐標(biāo)函數(shù)voidReadFace();/讀入面坐標(biāo)函數(shù)voidKeepOriginalMatrix(doubleOrig4,doubleDest4);voidGe

5、tMaxY();/獲取屏幕的最大y值函數(shù)voidGetMaxX();/獲取屏幕的最大x值函數(shù)voidDrawTriView(doubleTri84);/繪制三視圖調(diào)用函數(shù)voidDrawLine(CPointp,intnum);/繪制多邊形邊線函數(shù)voidDrawCube();/繪制立方體函數(shù)virtualCMygroup7View();#ifdef_DEBUGvirtualvoidAssertValid()const;virtualvoidDump(CDumpContext&dc)const;#endifprotected:Generatedmessagemapfunctionsprotec

6、ted:/AFX_MSG(CMygroup7View)afx_msgvoidOnDrawHView();afx_msgvoidOnDrawWView();afx_msgvoidOnDrawVView();afx_msgvoidOnDrawresource();/AFX_MSGDECLARE_MESSAGE_MAP();#ifndef_DEBUG/debugversioningroup7View.cppinlineCMygroup7Doc*CMygroup7View:GetDocument()return(CMygroup7Doc*)m_pDocument;#endif.精選文檔/AFX_INS

7、ERT_LOCATION/MicrosoftVisualC+willinsertadditionaldeclarationsimmediatelybeforethepreviousline.#endif/!defined(AFX_group7VIEW_H_15A74253_C6B0_462A_83DC_3F71E576EE24_INCLUDED_)group7View.cpp文件group7View.cpp:implementationoftheCMygroup7Viewclass#includestdafx.h#includegroup7.h#includegroup7Doc.h#inclu

8、degroup7View.h#defineROUND(a)int(a+0.5)/四舍五入#definePI3.1415926/圓周率#includemath.h/數(shù)學(xué)頭文件#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE=_FILE_;#endif/CMygroup7ViewIMPLEMENT_DYNCREATE(CMygroup7View,CView)BEGIN_MESSAGE_MAP(CMygroup7View,CView)/AFX_MSG_MAP(CMygroup7View)ON_COMMAND(ID_DR

9、AW_H_VIEW,OnDrawHView)ON_COMMAND(ID_DRAW_W_VIEW,OnDrawWView)ON_COMMAND(ID_DRAW_V_VIEW,OnDrawVView)ON_COMMAND(ID_DRAWRESOURCE,OnDrawresource)/AFX_MSG_MAP/StandardprintingcommandsON_COMMAND(ID_FILE_PRINT,CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT,CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVI

10、EW,CView:OnFilePrintPreview).精選文檔END_MESSAGE_MAP()/CMygroup7Viewconstruction/destructionCMygroup7View:CMygroup7View()/TODO:addconstructioncodehereCMygroup7View:CMygroup7View()BOOLCMygroup7View:PreCreateWindow(CREATESTRUCT&cs)TODO:ModifytheWindowclassorstylesherebymodifyingtheCREATESTRUCTcsreturnCVie

11、w:PreCreateWindow(cs);/CMygroup7ViewdrawingvoidCMygroup7View:OnDraw(CDC*pDC)/CMygroup7Doc*pDoc=GetDocument();/ASSERT_VALID(pDoc);GetMaxX();GetMaxY();CPenMyPen3d,MyPen2d,MyPen,*OldPen;MyPen3d.CreatePen(PS_SOLID,1,RGB(0,0,255);OldPen=pDC-SelectObject(&MyPen3d);pDC-MoveTo(MaxX/4,MaxY/2);/繪制y軸pDC-LineTo

12、(MaxX/2-25,MaxY/2);pDC-TextOut(MaxX/2-50,MaxY/2-20,y);pDC-MoveTo(MaxX/4,MaxY/2);/繪制z軸pDC-LineTo(MaxX/4,0);pDC-TextOut(MaxX/4-20,10,z);pDC-MoveTo(MaxX/4,MaxY/2);/繪制x軸pDC-LineTo(MaxX/4-MaxY/2,MaxY);/夾角為135pDC-TextOut(MaxX/4-MaxY/2+70,MaxY-30,x);pDC-TextOut(MaxX/4-20,MaxY/2-10,0);.精選文檔pDC-TextOut(20,20

13、,長方體);pDC-SelectObject(OldPen);MyPen3d.DeleteObject();MyPen.CreatePen(PS_SOLID,3,RGB(0,255,0);OldPen=pDC-SelectObject(&MyPen);pDC-MoveTo(MaxX/2-25,0);/繪制切割線pDC-LineTo(MaxX/2-25,MaxY);pDC-SelectObject(OldPen);MyPen.DeleteObject();if(ViewKind=1)MyPen2d.CreatePen(PS_SOLID,1,RGB(0,0,255);OldPen=pDC-Sele

14、ctObject(&MyPen2d);pDC-MoveTo(MaxX/2-25,MaxY/2);/繪制x軸pDC-LineTo(3*MaxX/4,MaxY/2);pDC-TextOut(MaxX/2-15,MaxY/2-20,x);pDC-MoveTo(3*MaxX/4,MaxY/2);/繪制z軸pDC-LineTo(3*MaxX/4,0);pDC-TextOut(3*MaxX/4-20,10,z);pDC-MoveTo(3*MaxX/4,MaxY/2);/繪制右y軸pDC-LineTo(MaxX,MaxY/2);pDC-TextOut(MaxX-20,MaxY/2-20,y);pDC-Mov

15、eTo(3*MaxX/4,MaxY/2);/繪制下y軸pDC-LineTo(3*MaxX/4,MaxY);pDC-TextOut(3*MaxX/4-20,MaxY-20,y);pDC-TextOut(MaxX/2+10,20,三視圖);pDC-SelectObject(OldPen);MyPen2d.DeleteObject();elseMyPen2d.CreatePen(PS_SOLID,1,RGB(0,0,255);OldPen=pDC-SelectObject(&MyPen2d);pDC-MoveTo(3*MaxX/4,MaxY/2);/繪制z軸pDC-LineTo(3*MaxX/4,0

16、);pDC-TextOut(3*MaxX/4-20,10,z);pDC-MoveTo(3*MaxX/4,MaxY/2);/繪制右y軸pDC-LineTo(MaxX,MaxY/2);pDC-TextOut(MaxX-20,MaxY/2-20,y);pDC-TextOut(MaxX/2+10,20,投影圖);pDC-SelectObject(OldPen);MyPen2d.DeleteObject();.精選文檔CMygroup7Doc*pDoc=GetDocument();ASSERT_VALID(pDoc);/TODO:adddrawcodefornativedatahere/CMygroup

17、7ViewprintingBOOLCMygroup7View:OnPreparePrinting(CPrintInfo*pInfo)/defaultpreparationreturnDoPreparePrinting(pInfo);voidCMygroup7View:OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)/TODO:addextrainitializationbeforeprintingvoidCMygroup7View:OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)/TODO:addc

18、leanupafterprinting/CMygroup7Viewdiagnostics#ifdef_DEBUGvoidCMygroup7View:AssertValid()constCView:AssertValid();voidCMygroup7View:Dump(CDumpContext&dc)constCView:Dump(dc);CMygroup7Doc*CMygroup7View:GetDocument()/non-debugversionisinlineASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CMygroup7Doc);return(C

19、Mygroup7Doc*)m_pDocument;.精選文檔#endif/_DEBUG/CMygroup7ViewmessagehandlersvoidCMygroup7View:OnDrawHView()/繪制H面if(ViewKind!=1)ViewKind=1;RedrawWindow();ReadPoint();ReadFace();DrawCube();doubleTH44;/俯視圖變換矩陣doublePtemp84;ClearMatrix(TH);TH00=1;TH12=-1;TH32=-50;TH33=1;KeepOriginalMatrix(Pt3D,Ptemp);Calcul

20、ate(Ptemp,TH);DrawTriView(Ptemp);/TODO:AddyourcommandhandlercodeherevoidCMygroup7View:OnDrawWView()/繪制W面if(ViewKind!=1)ViewKind=1;RedrawWindow();ReadPoint();ReadFace();DrawCube();doubleTW44;/俯視圖變換矩陣doublePtemp84;ClearMatrix(TW);.精選文檔TW10=-1;TW22=1;TW30=-50;TW33=1;KeepOriginalMatrix(Pt3D,Ptemp);Calcu

21、late(Ptemp,TW);DrawTriView(Ptemp);/TODO:Addyourcommandhandlercodehere繪制立方體函數(shù)voidCMygroup7View:DrawCube()CPointp5;/定義多邊形極點(diǎn)數(shù)組Transform3DTo2D(Pt3D,Pt2D,8);intTotalEdge,PointNumber;for(intface=0;face6;face+)TotalEdge=Ftface0;/每個(gè)面的總邊數(shù)for(intedge=1;edge=TotalEdge;edge+)/邊循環(huán)PointNumber=Ftfaceedge;/面的極點(diǎn)號(hào)ped

22、ge=CPoint(ROUND(MaxX/4+Pt2DPointNumber0),ROUND(MaxY/2+Pt2DPointNumber1);DrawLine(p,TotalEdge);/繪制多邊形繪制多邊形邊線函數(shù)voidCMygroup7View:DrawLine(CPointp,intnum)CClientDCdc(this);for(inti=1;i=num;i+)if(i=1)dc.MoveTo(p1);elsedc.LineTo(pi);dc.LineTo(p1);繪制三視圖調(diào)用函數(shù)voidCMygroup7View:DrawTriView(doubleTri4).精選文檔CPo

23、intp5;intTotalEdge,PointNumber;for(intface=0;face6;face+)TotalEdge=Ftface0;/每個(gè)面的總邊數(shù)for(intedge=1;edge=TotalEdge;edge+)/邊循環(huán)PointNumber=Ftfaceedge;/面的極點(diǎn)號(hào)pedge=CPoint(ROUND(3*MaxX/4-TriPointNumber0),ROUND(MaxY/2-TriPointNumber2);DrawLine(p,TotalEdge);獲取屏幕的最大x值函數(shù)voidCMygroup7View:GetMaxX()CRectRect;GetC

24、lientRect(&Rect);MaxX=Rect.right;獲取屏幕的最大y值函數(shù)voidCMygroup7View:GetMaxY()CRectRect;GetClientRect(&Rect);MaxY=Rect.bottom;voidCMygroup7View:KeepOriginalMatrix(doubleOrig4,doubleDest4)inti,j;for(i=0;i8;i+)for(j=0;j4;j+)Destij=Origij;讀入面坐標(biāo)函數(shù)voidCMygroup7View:ReadFace()Ft00=4;Ft01=0;Ft02=1;Ft03=2;Ft04=3;.

25、精選文檔Ft10=4;Ft11=3;Ft12=0;Ft13=4;Ft14=7;Ft20=4;Ft21=7;Ft22=4;Ft23=5;Ft24=6;Ft30=4;Ft31=6;Ft32=2;Ft33=1;Ft34=5;Ft40=4;Ft41=5;Ft42=1;Ft43=0;Ft44=4;Ft50=4;Ft51=6;Ft52=2;Ft53=3;Ft54=7;讀入極點(diǎn)坐標(biāo)函數(shù)voidCMygroup7View:ReadPoint()Pt3D00=0;Pt3D01=0;Pt3D02=0;Pt3D03=1;Pt3D10=100;Pt3D11=0;Pt3D12=0;Pt3D13=1;Pt3D20=100

26、;Pt3D21=200;Pt3D22=0;Pt3D23=1;Pt3D30=0;Pt3D31=200;Pt3D32=0;Pt3D33=1;Pt3D40=0;Pt3D41=0;Pt3D42=300;Pt3D43=1;Pt3D50=100;Pt3D51=0;Pt3D52=300;Pt3D53=1;Pt3D60=100;Pt3D61=200;Pt3D62=300;Pt3D63=1;Pt3D70=0;Pt3D71=200;Pt3D72=300;Pt3D73=1;三維變二維函數(shù)voidCMygroup7View:Transform3DTo2D(constdoubleP3D4,doubleP2D2,constintn)for(inti

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論