版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.計(jì)算機(jī)圖形學(xué)投影變換 姓名: 學(xué)號(hào): 班級(jí):一大班二小班.一、實(shí)現(xiàn)目標(biāo) 將屏幕垂直劃分為兩部分,左半部分繪制三維坐標(biāo)系和長(zhǎng)方體, 右半部分繪制二維坐標(biāo)系及三視圖。首先設(shè)置成長(zhǎng)方體,在繪制繪制三視圖二、算法設(shè)計(jì)1. 在屏幕左半部分繪制三維坐標(biāo)系。 2. 在屏幕右半部分繪制二維坐標(biāo)系。3. 讀入長(zhǎng)方體的三維頂點(diǎn)齊次坐標(biāo)及其面坐標(biāo),并將三維頂點(diǎn)齊次坐標(biāo)變換為相應(yīng)的屏幕二維齊次坐標(biāo),并在屏幕左半部分繪制長(zhǎng)方體。4. 分別給主視圖、俯視圖和側(cè)視圖變換矩陣的非零元素賦值。5. 將原始圖形的頂點(diǎn)集合齊次坐標(biāo)矩陣和三視圖變換矩陣相乘,結(jié)果賦予變換后的三視圖頂點(diǎn)集合齊次坐標(biāo)矩陣。其中,主視圖變換矩陣為:俯視圖
2、變換矩陣為:主視圖變換矩陣為:6. 根據(jù)變換后的頂點(diǎn)集合齊次坐標(biāo)矩陣的元素繪制三視圖。三、源代碼及注釋Group7View.h文件lass CMygroup7View : public CViewprotected: / create from serialization onlyCMygroupView();DECLARE_DYNCREATE(CMygroupView)/ Attributespublic:CMygroup7Doc* GetDocument();/ Operationspublic:int ViewKind;/ Overrides/ ClassWizard generated
3、 virtual function overrides/AFX_VIRTUAL(CMygroup7View)public:virtual void OnDraw(CDC* pDC); / overridden to draw this viewvirtual BOOL PreCreateWindow(CREATESTRUCT& cs);protected:virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);virtual void
4、OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);/AFX_VIRTUAL/ Implementationpublic:void ClearMatrix(double A44);/清除矩陣函數(shù)void Calculate(double P4,double T4);/兩個(gè)矩陣相乘函數(shù)double Pt3D84;double Pt2D82;int MaxY;int MaxX;int Ft65;void Transform3DTo2D(const double P3D4,double P2D2,const int n);/三維變二維函數(shù)void ReadPoint
5、();/讀入頂點(diǎn)坐標(biāo)函數(shù)void ReadFace();/讀入面坐標(biāo)函數(shù)void KeepOriginalMatrix(double Orig4,double Dest4);void GetMaxY();/獲得屏幕的最大y值函數(shù)void GetMaxX();/獲得屏幕的最大x值函數(shù)void DrawTriView(double Tri84);/繪制三視圖調(diào)用函數(shù)void DrawLine(CPoint p,int num);/繪制多邊形邊線函數(shù)void DrawCube();/繪制立方體函數(shù)virtual CMygroup7View();#ifdef _DEBUGvirtual void As
6、sertValid() const;virtual void Dump(CDumpContext& dc) const;#endifprotected:/ Generated message map functionsprotected:/AFX_MSG(CMygroup7View)afx_msg void OnDrawHView();afx_msg void OnDrawWView();afx_msg void OnDrawVView();afx_msg void OnDrawresource();/AFX_MSGDECLARE_MESSAGE_MAP();#ifndef _DEBUG /
7、debug version in group7View.cppinline CMygroup7Doc* CMygroup7View:GetDocument() return (CMygroup7Doc*)m_pDocument; #endif/AFX_INSERT_LOCATION/ Microsoft Visual C+ will insert additional declarations immediately before the previous line.#endif / !defined(AFX_group7VIEW_H_15A74253_C6B0_462A_83DC_3F71E
8、576EE24_INCLUDED_)group7View.cpp文件/ group7View.cpp : implementation of the CMygroup7View class/#include stdafx.h#include group7.h#include group7Doc.h#include group7View.h#define ROUND(a) int(a+0.5)/四舍五入#define PI 3.1415926/圓周率#include math.h/數(shù)學(xué)頭文件#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEsta
9、tic char THIS_FILE = _FILE_;#endif/ CMygroup7ViewIMPLEMENT_DYNCREATE(CMygroup7View, CView)BEGIN_MESSAGE_MAP(CMygroup7View, CView)/AFX_MSG_MAP(CMygroup7View)ON_COMMAND(ID_DRAW_H_VIEW, OnDrawHView)ON_COMMAND(ID_DRAW_W_VIEW, OnDrawWView)ON_COMMAND(ID_DRAW_V_VIEW, OnDrawVView)ON_COMMAND(ID_DRAWRESOURCE,
10、 OnDrawresource)/AFX_MSG_MAP/ Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview)END_MESSAGE_MAP()/ CMygroup7View construction/destructionCMygroup7View:CMygroup7View()/ TO
11、DO: add construction code hereCMygroup7View:CMygroup7View()BOOL CMygroup7View:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn CView:PreCreateWindow(cs);/ CMygroup7View drawingvoid CMygroup7View:OnDraw(CDC* pDC)/CMygroup7Doc* pDo
12、c = GetDocument();/ASSERT_VALID(pDoc);GetMaxX();GetMaxY();CPen MyPen3d,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(MaxX/2-25,MaxY/2);pDC-TextOut(MaxX/2-50,MaxY/2-20,y);pDC-MoveTo(MaxX/4,MaxY/2);/繪制z軸pDC-L
13、ineTo(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,長(zhǎng)方體);pDC-SelectObject(OldPen);MyPen3d.DeleteObject();MyPen.CreatePen(PS_SOLID,3,RGB(0,255,0);O
14、ldPen=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-SelectObject(&MyPen2d);pDC-MoveTo(MaxX/2-25,MaxY/2);/繪制x軸pDC-LineTo(3*MaxX/4,MaxY/2);pDC-TextOut(Ma
15、xX/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-MoveTo(3*MaxX/4,MaxY/2);/繪制下y軸pDC-LineTo(3*MaxX/4,MaxY);pDC-TextOut(3*MaxX/4-20,MaxY-20,y);pDC-Tex
16、tOut(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);pDC-TextOut(3*MaxX/4-20,10,z);pDC-MoveTo(3*MaxX/4,MaxY/2);/繪制右y軸pDC-LineTo(MaxX,MaxY/2);pDC-T
17、extOut(MaxX-20,MaxY/2-20,y);pDC-TextOut(MaxX/2+10,20,投影圖);pDC-SelectObject(OldPen);MyPen2d.DeleteObject();CMygroup7Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data here/ CMygroup7View printingBOOL CMygroup7View:OnPreparePrinting(CPrintInfo* pInfo)/ default preparati
18、onreturn DoPreparePrinting(pInfo);void CMygroup7View:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add extra initialization before printingvoid CMygroup7View:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add cleanup after printing/ CMygroup7View diagnostics#ifdef _DEBUGvoid
19、 CMygroup7View:AssertValid() constCView:AssertValid();void CMygroup7View:Dump(CDumpContext& dc) constCView:Dump(dc);CMygroup7Doc* CMygroup7View:GetDocument() / non-debug version is inlineASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CMygroup7Doc);return (CMygroup7Doc*)m_pDocument;#endif /_DEBUG/ CMygrou
20、p7View message handlersvoid CMygroup7View:OnDrawHView() /繪制H面if(ViewKind!=1)ViewKind=1;RedrawWindow();ReadPoint();ReadFace();DrawCube();double TH44;/俯視圖變換矩陣double Ptemp84;ClearMatrix(TH);TH00=1;TH12=-1;TH32=-50;TH33=1;KeepOriginalMatrix(Pt3D,Ptemp); Calculate(Ptemp,TH);DrawTriView(Ptemp);/ TODO: Add
21、 your command handler code herevoid CMygroup7View:OnDrawWView() /繪制W面if(ViewKind!=1)ViewKind=1;RedrawWindow();ReadPoint();ReadFace();DrawCube();double TW44;/俯視圖變換矩陣double Ptemp84;ClearMatrix(TW);TW10=-1;TW22=1;TW30=-50;TW33=1;KeepOriginalMatrix(Pt3D,Ptemp);Calculate(Ptemp,TW);DrawTriView(Ptemp);/ TO
22、DO: Add your command handler code here/繪制立方體函數(shù)void CMygroup7View:DrawCube()CPoint p5;/定義多邊形頂點(diǎn)數(shù)組Transform3DTo2D(Pt3D,Pt2D,8);int TotalEdge,PointNumber;for(int face=0;face6;face+)TotalEdge=Ftface0;/每個(gè)面的總邊數(shù)for(int edge=1;edge=TotalEdge;edge+)/邊循環(huán)PointNumber=Ftfaceedge;/面的頂點(diǎn)號(hào)pedge=CPoint(ROUND(MaxX/4+Pt
23、2DPointNumber0),ROUND(MaxY/2+Pt2DPointNumber1);DrawLine(p,TotalEdge);/繪制多邊形 /繪制多邊形邊線函數(shù)void CMygroup7View:DrawLine(CPoint p, int num)CClientDC dc(this);for(int i=1;i=num;i+)if(i=1)dc.MoveTo(p1);elsedc.LineTo(pi);dc.LineTo(p1);/繪制三視圖調(diào)用函數(shù)void CMygroup7View:DrawTriView(double Tri4)CPoint p5;int TotalEdg
24、e,PointNumber;for(int face=0;face6;face+)TotalEdge=Ftface0;/每個(gè)面的總邊數(shù)for(int edge=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ù)void CMygroup7View:GetMaxX()CRect Rect;GetClientRect(&R
25、ect);MaxX=Rect.right;/獲得屏幕的最大y值函數(shù)void CMygroup7View:GetMaxY()CRect Rect;GetClientRect(&Rect);MaxY=Rect.bottom;void CMygroup7View:KeepOriginalMatrix(double Orig4, double Dest4)int i,j;for(i=0;i8;i+)for(j=0;j4;j+)Destij=Origij;/讀入面坐標(biāo)函數(shù)void CMygroup7View:ReadFace()Ft00=4;Ft01=0;Ft02=1;Ft03=2;Ft04=3;Ft1
26、0=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ù)void CMygroup7View:ReadPoint()Pt3D00=0;Pt3D01=0;Pt3D02=0;Pt3D03=1;Pt3D10=100;Pt3D11=0;Pt3D12=0;Pt3D13=1;Pt3D20=100;Pt3D
27、21=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ù)void CMygroup7View:Transform3DTo2D(const double P3D4, double P2D2, const int n)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學(xué)(中醫(yī)學(xué))中醫(yī)診斷學(xué)試題及答案
- 2025年高職市場(chǎng)營(yíng)銷(市場(chǎng)推廣)試題及答案
- 2025年中職醫(yī)療器械維護(hù)與管理(設(shè)備保養(yǎng))試題及答案
- 2025年本科環(huán)境科學(xué)(空氣檢驗(yàn)技術(shù))試題及答案
- 2025年高職資源勘查(地質(zhì)技術(shù)推廣)試題及答案
- 2025年大學(xué)中國(guó)藝術(shù)史(書法藝術(shù)賞析)試題及答案
- 2025年中職體育訓(xùn)練(體育訓(xùn)練基礎(chǔ))試題及答案
- 2025年大學(xué)大一(文化產(chǎn)業(yè)管理)文化產(chǎn)業(yè)管理學(xué)基礎(chǔ)階段測(cè)試題及答案
- 2025年高職會(huì)展服務(wù)與管理(展會(huì)組織)試題及答案
- 2025年高職農(nóng)業(yè)(應(yīng)用技術(shù))試題及答案
- DGTJ08-10-2022 城鎮(zhèn)天然氣管道工程技術(shù)標(biāo)準(zhǔn)
- 整形外科醫(yī)生個(gè)人工作述職報(bào)告
- 水冷精密空調(diào)培訓(xùn)課件
- 大型機(jī)械設(shè)備安全操作培訓(xùn)教材
- 室外給排水管道施工技術(shù)交底范本
- 移動(dòng)電源生產(chǎn)工藝流程
- 動(dòng)靜脈內(nèi)瘺術(shù)后護(hù)理查房規(guī)范
- 核安全事故培訓(xùn)課件
- 碼頭泊位改造試運(yùn)行方案
- 2025年中考英語(yǔ)真題分類匯編(全國(guó))專題04 時(shí)態(tài)、語(yǔ)態(tài)、三大從句及常識(shí)和情景交際(原卷版)
- 【語(yǔ)文】北京市朝陽(yáng)外語(yǔ)小學(xué)小學(xué)二年級(jí)上冊(cè)期末試卷(含答案)
評(píng)論
0/150
提交評(píng)論