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

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論