圖形學課程設計報告冊(共16頁)_第1頁
圖形學課程設計報告冊(共16頁)_第2頁
圖形學課程設計報告冊(共16頁)_第3頁
圖形學課程設計報告冊(共16頁)_第4頁
圖形學課程設計報告冊(共16頁)_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、2011 2012學年度第 2學期(xuq)贛南師范學院數(shù)學(shxu)與計算機科學學院課程設計報告(bogo)冊課程設計名稱:計算機圖形學實用技術專 業(yè): 計算機科學與技術 班 級: 學 號: 姓 名: 指 導 老 師: 章銀娥 課程設計報告(bogo)設計項目編 號 3名 稱二維圖形變換及組合變換主要儀器設備電腦附屬設備無主要使用軟件Microsoft Visual C+ 6. 0起止時間2012年 5 月 19日6月 4 日 同組人鐘優(yōu),丁悅,李珍,陳磊課程設計任務書利用Microsoft Visual C+6.0,設計一個能夠實現(xiàn)二維圖形變換及組合變換的程序。具體包括:(1) 編寫變換

2、矩陣類,要求具有加號、減號、乘號等運算符重載函數(shù);(1) 實現(xiàn)平移、縮放、對稱、錯切、旋轉變換。(3) 實現(xiàn)組合變換。 中文(zhngwn)摘要本文通過闡明(chnmng)多邊形變換的原理及方法,設置變換矩陣,演示了多邊形的二維幾何圖形的平移、縮放、錯切等基本變換與包括二種變換組合的幾何變換過程,該演示過程本程序中采用文檔視圖結構實現(xiàn),創(chuàng)建一個單文檔視圖,添加繪圖的菜單資源和工具欄,并設置鼠標左鍵響應繪制坐標,鼠標單擊各個菜單或工具欄時即可演示二維幾何圖形的各種變化。關鍵字:多邊形 變換矩陣 繪制坐標 目錄 TOC o 1-3 h z u HYPERLINK l _Toc326963003 緒

3、論(xln) PAGEREF _Toc326963003 h 4 HYPERLINK l _Toc326963004 (一)需求(xqi)分析 PAGEREF _Toc326963004 h 4 HYPERLINK l _Toc326963005 1.1功能(gngnng)需求 PAGEREF _Toc326963005 h 4 HYPERLINK l _Toc326963006 1.2性能需求 PAGEREF _Toc326963006 h 4 HYPERLINK l _Toc326963007 1.3可靠性和可用性 PAGEREF _Toc326963007 h 4 HYPERLINK l

4、 _Toc326963008 1.4接口需求 PAGEREF _Toc326963008 h 4 HYPERLINK l _Toc326963009 1.5約束 PAGEREF _Toc326963009 h 4 HYPERLINK l _Toc326963010 1.6逆向需求 PAGEREF _Toc326963010 h 4 HYPERLINK l _Toc326963011 1.7將來可能提出的要求 PAGEREF _Toc326963011 h 4 HYPERLINK l _Toc326963012 (二)關鍵算法的理論介紹和程序實現(xiàn)步驟 PAGEREF _Toc326963012

5、h 4 HYPERLINK l _Toc326963013 2.1比例變換 PAGEREF _Toc326963013 h 4 HYPERLINK l _Toc326963014 2.2繞任意一點旋轉變換 PAGEREF _Toc326963014 h 5 HYPERLINK l _Toc326963015 2.3錯切變換 PAGEREF _Toc326963015 h 5 HYPERLINK l _Toc326963016 2.4平移變換 PAGEREF _Toc326963016 h 6 HYPERLINK l _Toc326963017 (三)具體實現(xiàn) PAGEREF _Toc32696

6、3017 h 6 HYPERLINK l _Toc326963018 3.1.1多邊形定義代碼 PAGEREF _Toc326963018 h 6 HYPERLINK l _Toc326963019 3.1.2多邊形實現(xiàn)代碼 PAGEREF _Toc326963019 h 6 HYPERLINK l _Toc326963020 3.2比例變換 PAGEREF _Toc326963020 h 8 HYPERLINK l _Toc326963021 3.3錯切變換 PAGEREF _Toc326963021 h 8 HYPERLINK l _Toc326963022 3.4組合變換中的旋轉變換 P

7、AGEREF _Toc326963022 h 9 HYPERLINK l _Toc326963023 3.5平移變換 PAGEREF _Toc326963023 h 9 HYPERLINK l _Toc326963024 (四)運行調試與分析討論 PAGEREF _Toc326963024 h 13 HYPERLINK l _Toc326963025 (五)設計體會與小結 PAGEREF _Toc326963025 h 13 HYPERLINK l _Toc326963026 (六)參考文獻 PAGEREF _Toc326963026 h 13緒論通過圖形舊點集*變換矩陣=圖形新點集的原理,計

8、算機圖形學能夠很好的解決二維圖形的變換及組合變換。本文主要研究的是如何根據(jù)已知條件求出變換矩陣。一旦變換矩陣求出即可完成二維圖形的各種變換。正文(一)需求分析 1.1功能需求在實際繪圖應用中,經(jīng)常要對圖形進行各種變換,如平移,縮放,對稱,錯切,旋轉變換等。通過圖形變換,可以有簡單的圖形生成復雜的圖形。1.2性能需求本圖形變化程序約占內存300KB,安全性良好,要求能在0.1s的時間內響應用戶所要求的圖形變換。1.3可靠性和可用性該圖形變換程序在一個月內出現(xiàn)的故障次數(shù)不大于1次。如系統(tǒng)損壞,維修的時間不能超過可用總時間的1%。1.4接口需求在圖形變換程序中繪制多邊形時,程序默認以點繪制圖形,且繪

9、制完畢后需要用鼠標左鍵將焦點置于程序中,使得后面的操作能正常進行。1.5約束本圖形變換程序是用VC6.0設計的,語言使用中文??梢栽趙indows98/xp/7,vista上運行。1.6逆向需求本圖形軟件著重于多邊形的各種變換形式,暫不考慮直線,橢圓等圖形1.7將來可能提出的要求 能對空間幾何多邊形進行組合變換。(二)關鍵算法的理論介紹和程序實現(xiàn)步驟 2.1比例變換 比例變換是讓點的坐標各乘以一個比例因子,通過對各個點的變換構成面的變換,從而實現(xiàn)對多邊形的伸縮。其變換公式為: x = ax y = dy 因此,可令比例變換矩陣Ts為:Ts= ,則:X Y 1 = ax dy 1 = X Y 1

10、 其中a,d分別為x,y方向上的比例因子(a,d0)。討論: 若a = d = 1, 為恒等變換,即變換后點的坐標不變。 若a = d1,則為等比變換,變換結果是圖形等比例放大(a = d 1)或等比例縮?。╝ = d 0時沿+X向錯切;c0時,沒+Y向錯切;b0時沿Y向錯切。2.4平移變換平移變換矩陣為:Tt = ,則 x y 1 = x+k y+m 1 = x y 1 (三)具體實現(xiàn)3.1.1多邊形定義代碼Class CPolygon : public CShapeProtected: POINT m_pPoints20; Int m_pNum;COLRREF M_FColor;Int m

11、_FFlag,m_HFlag,m_pHatch;CPolygon ()DECLARE_SERIAL(CPolygon) Public: CPolygon (POINT points20,int n,int Width,int Stytle,COLORREF Color,int FFlag,COLORREF FColor,int HFlag,int pHatch); void Drawing (CDC *pDC); virtual void Serialize(CArchive &ar);3.1.2多邊形實現(xiàn)代碼/CPolygonIMPLEMENT_SERIAL(CPolygon,CShape,

12、1)CPolygon:CPolygon(POINT points20,int n,int Width,int Style,COLORREF Color, int FFlag,COLORREF FColor,int HFlag,int HPattern)m_pNum=n;for(int i=0;iSelectObject(&NewPen); pDC-SelectStockObject(NULL_BRUSH);int i,seedx=0,seedy=0;switch(m_FFlag)case 0: pDC-Polygon(m_pPoints,m_pNum);break;case 1:VCFill(

13、pDC); break;case 2: pDC-Polygon(m_pPoints,m_pNum); ScanLineFill(m_pNum,m_pPoints,m_FColor,pDC);break;case 3: pDC-Polygon(m_pPoints,m_pNum); for(i=0;iPolygon(m_pPoints,m_pNum); for(i=0;iSelectObject(pOldPen);void CPolygon:VCFill(CDC *pDC) CBrush NewBrush,*pOldBrush;if(m_HFlag=0)NewBrush.CreateSolidBr

14、ush(m_pColor);else NewBrush.CreateHatchBrush(m_HPattern,m_FColor);pOldBrush=pDC-SelectObject(&NewBrush); pDC-Polygon(m_pPoints,m_pNum); pDC-SelectObject(pOldBrush);void CPolygon:Serialize(CArchive &ar)int i;if(ar.IsStoring()arm_pNum;for(i=0;im_pNum;i+) arm_pPointsi; arm_FFlagm_FColorm_HFlagm_pNum;fo

15、r(i=0;im_pPointsi; arm_FFlagm_FColorm_HFlagm_HPattern;CShape:Serialize(ar);3.2比例變換void ScaleTransform(POINT p20,int m,float ScaleX,float ScaleY)for(int i=0;im;i+)pi.x=pi.x*ScaleX; /分別將x,y坐標進行伸縮比例變換pi.y=pi.y*ScaleY;3.3錯切變換void SkewTransform(POINT p20,int m,float SkewX,float SkewY)for(int i=0;im;i+)pi

16、.x=pi.x+pi.y*SkewX;pi.y=pi.x*SkewY+pi.y;3.4組合變換中的旋轉變換void RotateTransform(POINT p20,int m,POINT Cen,float theta) int i;double a,b,c,d; POINT p120; double alfa=theta*PI/180; a=cos(alfa);b=sin(alfa); for(i=0;im;i+) p1i.x=pi.x*a-pi.y*b+Cen.x*(1-a)+Cen.y*b; p1i.y=pi.x*b+pi.y*a-Cen.x*b+Cen.y*(1-a); for(i

17、=0;im;i+) pi.x=p1i.x;pi.y=p1i.y;3.5平移變換void MoveTransform(POINT p20,int m,float MoveX,float MoveY)for(int i=0;im;i+)pi.x=pi.x+MoveX;pi.y=pi.y+MoveY;綜合void initData(float x20,float y20,float z20,int edge402) x1=x4=x5=x8=0; x2=x3=x6=x7=10; y1=y2=y3=y4=8; y5=y6=y7=y8=0; z1=z2=z5=z6=0; z3=z4=z7=z8=6; ed

18、ge00=1;edge01=2; edge10=2;edge11=3; edge20=3;edge21=4; edge30=4;edge31=1; edge40=5;edge41=6; edge50=6;edge51=7; edge60=7;edge61=8; edge70=8;edge71=5; edge80=1;edge81=5; edge90=4;edge91=8; edge100=2;edge101=6;edge110=3;edge111=7; void ProjOrtho(int np,int ne,float x20,float y20,float z20,int edge402,

19、CDC *pDC) float x120,z120;int scale=10,n=20,k=20;/V面 for(int i=1;i=np;i+)x1i=-xi*scale+XLen;z1i=-zi*scale+YLen;for(int j=0;jMoveTo(int)x1edgej0,(int)z1edgej0);pDC-LineTo(int)x1edgej1,(int)z1edgej1);/H面for(i=1;i=np;i+)x1i=xi;z1i=-yi-n;x1i=-x1i*scale+XLen;z1i=-z1i*scale+YLen;for(j=0;jMoveTo(int)x1edge

20、j0,(int)z1edgej0);pDC-LineTo(int)x1edgej1,(int)z1edgej1);/W面for(i=1;i=np;i+)x1i=-yi-k;z1i=zi;x1i=-x1i*scale+XLen;z1i=-z1i*scale+YLen;for(j=0;jMoveTo(int)x1edgej0,(int)z1edgej0);pDC-LineTo(int)x1edgej1,(int)z1edgej1);void ProjBoblique(int np,int ne,float x20,float y20,float z20,int edge402,CDC *pDC)

21、float x120,z120;int scale=30;for(int i=1;i=np;i+)x1i=xi-0.354*yi;z1i=-0.354*yi+zi;x1i=-x1i*scale+XLen;z1i=-z1i*scale+YLen;for(int j=0;jMoveTo(int)x1edgej0,(int)z1edgej0);pDC-LineTo(int)x1edgej1,(int)z1edgej1);void ProjBortho(int np,int ne,float x20,float y20,float z20,int edge402,CDC *pDC)float x120

22、,z120;int scale=30;for(int i=1;i=np;i+)x1i=0.935*xi-0.354*yi;z1i=-0.118*xi-0.312*yi+0.943*zi;x1i=-x1i*scale+XLen;z1i=-z1i*scale+YLen;for(int j=0;jMoveTo(int)x1edgej0,(int)z1edgej0);pDC-LineTo(int)x1edgej1,(int)z1edgej1);void ProjIso(int np,int ne,float x20,float y20,float z20,int edge402,CDC *pDC) /

23、 TODO: Add your command handler code herefloat x120,z120;int scale=30;for(int i=1;i=np;i+)x1i=0.707*(xi-yi);z1i=-0.408*(xi+yi)+0.816*zi;x1i=-x1i*scale+XLen;z1i=-z1i*scale+YLen;for(int j=0;jMoveTo(int)x1edgej0,(int)z1edgej0);pDC-LineTo(int)x1edgej1,(int)z1edgej1);void ProjOne(int np,int ne,float x20,

24、float y20,float z20,int edge402,CDC *pDC) float k=50.0,m=-8.0,n=-20.0,q=-0.1,scale=8.0;float x120,z120,t20;for(int i=1;i=np;i+)xi=xi+k; yi=yi+m; zi=zi+n;ti=q*yi+1.0;x1i=xi/ti;z1i=zi/ti;x1i=-x1i*scale+XLen+200;z1i=-z1i*scale+YLen; int n1,n2;for(i=0;iMoveTo(int)x1n1,(int)z1n1);pDC-LineTo(int)x1n2,(int)z1n2);void ProjTwo(int np,int ne,float x20,float y20,float z20,int edge402,CDC *pDC) float x120,y120,z120,t20;float k=-8.0,m=-6.0,n=-10,q=-0.1,scale=10.0;for(int i=1;i=np;i+)x1i=0.866*xi-0.5*yi+k; y1i=0.5*xi+0.866*yi+m;z1i=zi+n;ti=q*y1i+1.0;x1i=-x1i/ti*scale+XLen; z1i=-z1i/ti*scale+Y

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論