圖形學(xué)課程設(shè)計(jì)報(bào)告冊(共16頁)_第1頁
圖形學(xué)課程設(shè)計(jì)報(bào)告冊(共16頁)_第2頁
圖形學(xué)課程設(shè)計(jì)報(bào)告冊(共16頁)_第3頁
圖形學(xué)課程設(shè)計(jì)報(bào)告冊(共16頁)_第4頁
圖形學(xué)課程設(shè)計(jì)報(bào)告冊(共16頁)_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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

2、矩陣類,要求具有加號(hào)、減號(hào)、乘號(hào)等運(yùn)算符重載函數(shù);(1) 實(shí)現(xiàn)平移、縮放、對(duì)稱、錯(cuò)切、旋轉(zhuǎn)變換。(3) 實(shí)現(xiàn)組合變換。 中文(zhngwn)摘要本文通過闡明(chnmng)多邊形變換的原理及方法,設(shè)置變換矩陣,演示了多邊形的二維幾何圖形的平移、縮放、錯(cuò)切等基本變換與包括二種變換組合的幾何變換過程,該演示過程本程序中采用文檔視圖結(jié)構(gòu)實(shí)現(xiàn),創(chuàng)建一個(gè)單文檔視圖,添加繪圖的菜單資源和工具欄,并設(shè)置鼠標(biāo)左鍵響應(yīng)繪制坐標(biāo),鼠標(biāo)單擊各個(gè)菜單或工具欄時(shí)即可演示二維幾何圖形的各種變化。關(guān)鍵字:多邊形 變換矩陣 繪制坐標(biāo) 目錄 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 (二)關(guān)鍵算法的理論介紹和程序?qū)崿F(xiàn)步驟 PAGEREF _Toc326963012

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

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

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

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

9、制完畢后需要用鼠標(biāo)左鍵將焦點(diǎn)置于程序中,使得后面的操作能正常進(jìn)行。1.5約束本圖形變換程序是用VC6.0設(shè)計(jì)的,語言使用中文??梢栽趙indows98/xp/7,vista上運(yùn)行。1.6逆向需求本圖形軟件著重于多邊形的各種變換形式,暫不考慮直線,橢圓等圖形1.7將來可能提出的要求 能對(duì)空間幾何多邊形進(jìn)行組合變換。(二)關(guān)鍵算法的理論介紹和程序?qū)崿F(xiàn)步驟 2.1比例變換 比例變換是讓點(diǎn)的坐標(biāo)各乘以一個(gè)比例因子,通過對(duì)各個(gè)點(diǎn)的變換構(gòu)成面的變換,從而實(shí)現(xiàn)對(duì)多邊形的伸縮。其變換公式為: 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, 為恒等變換,即變換后點(diǎn)的坐標(biāo)不變。 若a = d1,則為等比變換,變換結(jié)果是圖形等比例放大(a = d 1)或等比例縮小(a = d 0時(shí)沿+X向錯(cuò)切;c0時(shí),沒+Y向錯(cuò)切;b0時(shí)沿Y向錯(cuò)切。2.4平移變換平移變換矩陣為:Tt = ,則 x y 1 = x+k y+m 1 = x y 1 (三)具體實(shí)現(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多邊形實(shí)現(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坐標(biāo)進(jìn)行伸縮比例變換pi.y=pi.y*ScaleY;3.3錯(cuò)切變換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組合變換中的旋轉(zhuǎn)變換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等.壓縮文件請(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)論