




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 購房權(quán)與旅游項(xiàng)目開發(fā)權(quán)捆綁轉(zhuǎn)讓合同
- 農(nóng)場(chǎng)草場(chǎng)租賃與養(yǎng)殖服務(wù)合同
- 拆遷補(bǔ)償安置補(bǔ)償款發(fā)放合同
- 環(huán)保項(xiàng)目財(cái)產(chǎn)保全申請(qǐng)擔(dān)保合同
- 建筑企業(yè)代理工商注冊(cè)及建筑工程承包服務(wù)合同
- 土壤環(huán)境測(cè)繪信息保密及許可合同
- 新解讀《CB-T 3880 - 1999三級(jí)鑄鋼錨鏈補(bǔ)焊技術(shù)要求》新解讀
- DBJ04-T333-2025 《屋頂綠化技術(shù)規(guī)程 》
- 汽車傳感器與檢測(cè)技術(shù)電子教案:熱敏電阻式液位傳感器
- 氣管插管的護(hù)理
- 2025年交警職業(yè)法律知識(shí)綜合試題庫
- 旅居基地免責(zé)協(xié)議書
- 2025陜西水務(wù)集團(tuán)限公司招聘80人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 江西省南昌市2025屆高三下學(xué)期二?;瘜W(xué)試題 含解析
- DB42-T 2078-2023 紅火蟻監(jiān)測(cè)與防控技術(shù)規(guī)程
- 2022教學(xué)能力大賽《智能網(wǎng)聯(lián)汽車傳感器測(cè)試與裝調(diào)》實(shí)施報(bào)告
- 充電掃地車管理制度
- 合肥市包河區(qū)2024年八年級(jí)《數(shù)學(xué)》下學(xué)期期末試題與參考答案
- 2025年甘肅省蘭州市學(xué)府致遠(yuǎn)學(xué)校中考押題卷(二)英語試題(含答案)
- T-CALC 007-2025 重癥監(jiān)護(hù)病房成人患者人文關(guān)懷規(guī)范
- 2025屆湖北省咸寧市三校中考化學(xué)模擬試卷含解析
評(píng)論
0/150
提交評(píng)論