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

下載本文檔

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

文檔簡(jiǎn)介

1、計(jì)算機(jī)圖形學(xué)Visual c+版考試作業(yè)報(bào)告題目: 計(jì)算機(jī)圖形學(xué)圖形畫板 專業(yè): 推薦IT學(xué)長(zhǎng)淘寶日用品店530213 班級(jí): 推薦IT學(xué)長(zhǎng)淘寶日用品店530213 學(xué)號(hào): 推薦IT學(xué)長(zhǎng)淘寶日用品店530213 姓名: 推薦IT學(xué)長(zhǎng)淘寶日用品店530213 指導(dǎo)教師: 推薦IT學(xué)長(zhǎng)淘寶日用品店530213 完成日期: 2015年12月2日一、課程設(shè)計(jì)目的本課程設(shè)計(jì)的目標(biāo)就是要達(dá)到理論與實(shí)際應(yīng)用相結(jié)合,提高學(xué)生設(shè)計(jì)圖形及編寫大型程序的能力,并培養(yǎng)基本的、良好的計(jì)算機(jī)圖形學(xué)的技能。設(shè)計(jì)中要求綜合運(yùn)用所學(xué)知識(shí),上機(jī)解決一些與實(shí)際應(yīng)用結(jié)合緊密的、規(guī)模較大的問題,通過分析、設(shè)計(jì)、編碼、調(diào)試等各環(huán)節(jié)的訓(xùn)練

2、,使學(xué)生深刻理解、牢固掌握計(jì)算機(jī)圖形學(xué)基本知識(shí)和算法設(shè)計(jì)的基本技能術(shù),掌握分析、解決實(shí)際問題的能力。通過這次設(shè)計(jì),要求在加深對(duì)課程基本內(nèi)容的理解。同時(shí),在程序設(shè)計(jì)方法以及上機(jī)操作等基本技能和科學(xué)作風(fēng)方面受到比較系統(tǒng)和嚴(yán)格的訓(xùn)練。二、設(shè)計(jì)內(nèi)容推薦IT學(xué)長(zhǎng)淘寶日用品店530213設(shè)計(jì)一個(gè)圖形畫板,在這個(gè)圖形畫板中要實(shí)現(xiàn):1, 畫線功能,而且畫的線要具備反走樣功能。2, 利用上面的畫線功能實(shí)現(xiàn)畫矩形,橢圓,多邊形,并且可以對(duì)這些圖形進(jìn)行填充。3,可以對(duì)選中區(qū)域的圖形放大,縮小,平移,旋轉(zhuǎn)等功能。3、 設(shè)計(jì)過程程序預(yù)處理:包括頭文件的加載,常量的定義以及全局變量的定義#include stdafx.h

3、#include GraDesign.h#include GraDesignDoc.h#include GraDesignView.h#include math.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/*自定義全局變量int type = -1;CPoint point1;CPoint point2;CPoint temp2;CPoint remember;int i = 0;/推薦IT學(xué)長(zhǎng)淘寶日用品店530213/ CGraDesignViewIMPLEM

4、ENT_DYNCREATE(CGraDesignView, CView)BEGIN_MESSAGE_MAP(CGraDesignView, CView)/AFX_MSG_MAP(CGraDesignView)ON_WM_LBUTTONDOWN()ON_WM_LBUTTONUP()ON_COMMAND(line, Online)ON_COMMAND(rectangle, Onrectangle)ON_COMMAND(ellipse, Onellipse)ON_COMMAND(polygon, Onpolygon)ON_COMMAND(fill, Onfill)ON_WM_RBUTTONDOWN(

5、)ON_COMMAND(tobig, Ontobig)/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()/推薦IT學(xué)長(zhǎng)淘寶日用品店530213/ CGraDesignView construction/destructionCG

6、raDesignView:CGraDesignView()/ TODO: add construction code hereCGraDesignView:CGraDesignView()BOOL CGraDesignView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn CView:PreCreateWindow(cs);/ CGraDesignView drawingvoid CGraDesignV

7、iew:OnDraw(CDC* pDC)CGraDesignDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data here/ CGraDesignView printingBOOL CGraDesignView:OnPreparePrinting(CPrintInfo* pInfo)/ default preparationreturn DoPreparePrinting(pInfo);void CGraDesignView:OnBeginPrinting(CDC* /*pDC*/,

8、 CPrintInfo* /*pInfo*/)/ TODO: add extra initialization before printingvoid CGraDesignView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add cleanup after printing/ CGraDesignView diagnostics#ifdef _DEBUGvoid CGraDesignView:AssertValid() constCView:AssertValid();void CGraDesignView:Dump(

9、CDumpContext& dc) constCView:Dump(dc);CGraDesignDoc* CGraDesignView:GetDocument() / non-debug version is inlineASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CGraDesignDoc);return (CGraDesignDoc*)m_pDocument;#endif /_DEBUG推薦IT學(xué)長(zhǎng)淘寶日用品店530213畫直線:RunLine函數(shù)繪制任意斜率的直線,并且添加反走樣算法,通過OnLButtonDown,OnLButtonUp函數(shù)記錄鼠

10、標(biāo)的點(diǎn)擊位置/*畫線函數(shù)*void CGraDesignView:RunLine(CPoint CP0, CPoint CP1)CDC *pDC=GetDC();CPoint p,t;int x,y;double e,k,e1;x=CP1.x-CP0.x;/斜率無窮if(x=0)if(CP0.yCP1.y)t=CP0;CP0=CP1;CP1=t;p=CP0;while(p.ySetPixelV(p,RGB(0,0,0);p.y+;elsey=CP1.y-CP0.y;k=double(y)/double(x);/斜率0至1if(k=0 & kCP1.x)t=CP0;CP0=CP1;CP1=t;p

11、=CP0;x=CP1.x-CP0.x;y=CP1.y-CP0.y;/畫反走樣k=double(CP0.y-CP1.y)/(CP0.x-CP1.x);e=k;while(p.xSetPixelV(p.x,p.y,RGB(e*255,e*255,e*255);pDC-SetPixelV(p.x,p.y+1,RGB(e1*255,e1*255,e1*255);p.x+;e=e+k;if(e=1)e-;p.y+;/斜率大于1if(k=1)if(CP0.y=CP1.y)t=CP0;CP0=CP1;CP1=t;p=CP0;x=CP1.x-CP0.x;y=CP1.y-CP0.y;k=double(CP0.y

12、-CP1.y)/(CP0.x-CP1.x);e=1/k;while(p.xSetPixelV(p.x,p.y,RGB(e*255,e*255,e*255);pDC-SetPixelV(p.x+1,p.y,RGB(e1*255,e1*255,e1*255);p.y+;e=e+1/k;if(e=1)e-;p.x+;/斜率-1至0if(k-1)if(CP0.xCP1.x)t=CP0;CP0=CP1;CP1=t;p=CP0;x=CP1.x-CP0.x;y=CP1.y-CP0.y;k=double(CP0.y-CP1.y)/(CP0.x-CP1.x);e=k;while(p.xSetPixelV(p.x

13、,p.y,RGB(e*255,e*255,e*255);pDC-SetPixelV(p.x,p.y-1,RGB(e1*255,e1*255,e1*255);p.x+;e=e-k;if(e=1)e-;p.y-;/斜率小于等于-1if(k=-1)if(CP0.yCP1.y-1)e1=1-e;pDC-SetPixelV(p.x,p.y,RGB(e*255,e*255,e*255);pDC-SetPixelV(p.x+1,p.y,RGB(e1*255,e1*255,e1*255);p.y-;e=e-1/k;if(e=1)e-;p.x+;推薦IT學(xué)長(zhǎng)淘寶日用品店530213void CGraDesign

14、View:Onrectangle() type = 2;畫矩形:利用畫線功能通過實(shí)現(xiàn)RunRectangle函數(shù)畫出矩形/*畫矩形函數(shù)*void CGraDesignView:RunRectangle(CPoint CP0, CPoint CP1)CDC *pDC=GetDC();CPoint CP2,CP3;/0 1 在同一對(duì)角線,2和1在垂直方向,0 3在豎直方向CP2.x=CP1.x;CP2.y=CP0.y;CP3.x=CP0.x;CP3.y=CP1.y;/*利用前面的功能畫4條邊*RunLine(CP0,CP2);RunLine(CP0,CP3);RunLine(CP1,CP2);Ru

15、nLine(CP1,CP3);void CGraDesignView:Onellipse() type = 3;畫橢圓:利用畫線功能通過實(shí)現(xiàn)RunEllipse函數(shù)畫出橢圓/*畫橢圓函數(shù)*void CGraDesignView:RunEllipse(CPoint CP0, CPoint CP1) CDC *pDC=GetDC(); CRect rect; GetClientRect(&rect); pDC-SetMapMode(8); pDC-SetWindowExt(rect.Width(),rect.Height(); pDC-SetViewportExt(rect.Width(),-re

16、ct.Height(); pDC-SetViewportOrg(CP0.x+CP1.x)/2,(CP0.y+CP1.y)/2); /建立坐標(biāo)軸/double a,b,d,d2,a2,b2;CPoint p,p0;int endx,endy;a=abs(CP0.x-CP1.x)/2;b=abs(CP0.y-CP1.y)/2;a2=a*a;b2=b*b;endx=(int)(a2/sqrt(a2+b2);d=b2-b*a2+0.25*a2;p.x=0;p.y=(long)b;if(CP0.y = CP1.y)RunRectangle(CP0,CP1);elsewhile(p.xSetPixelV(

17、p,RGB(0,0,0);pDC-SetPixelV(p.x,-p.y,RGB(0,0,0);pDC-SetPixelV(-p.x,p.y,RGB(0,0,0);pDC-SetPixelV(-p.x,-p.y,RGB(0,0,0);if(d=0)d=d+2*b2*p.x-2*a2*p.y+3*b2+2*a2;p.y-;else d=d+2*b2*p.x+3*b2;p.x+;d2=b2*(p.x+0.5)*(p.x+0.5)+a2*(p.y-1)*(p.y-1)-a2*b2;while(p.y=0)pDC-SetPixelV(p,RGB(0,0,0);pDC-SetPixelV(p.x,-p.y

18、,RGB(0,0,0);pDC-SetPixelV(-p.x,p.y,RGB(0,0,0);pDC-SetPixelV(-p.x,-p.y,RGB(0,0,0);p.y-;if(d20)d2=d2+2*b2*p.x-2*a2*p.y+2*b2+3*a2;p.x+;elsed2=d2-2*a2*p.y+3*a2;void CGraDesignView:Onpolygon() type = 4;void CGraDesignView:Onfill() type = 5;畫多邊形:利用畫線功能通過鼠標(biāo)左鍵函數(shù)OnLButtonDown取點(diǎn),用鼠標(biāo)右鍵函數(shù)OnRButtonDown實(shí)現(xiàn)回到原點(diǎn)CPoi

19、nt temp2;CPoint remember;int i = 0;/多邊形1if(4 = type)i+;tempi%2 = point;if(1=i) remember = tempi; return; RunLine(tempi%2,temp(i+1)%2);/畫多邊形,按鼠標(biāo)右鍵結(jié)束,并自動(dòng)連接起始點(diǎn),數(shù)據(jù)清零RunLine(tempi%2,remember);i=0;temp0.x=0;temp0.y=0;temp1.x=0;temp1.y=0;CView:OnRButtonDown(nFlags, point);填充:通過實(shí)現(xiàn)RunFill函數(shù)實(shí)現(xiàn)填充CPoint stack10

20、00000;void CGraDesignView:RunFill(CPoint point)CPoint p;int top;COLORREF r;CClientDC dc(this);top=0;stacktop=point;top+;while(top!=0)top-;p=stacktop;r=dc.GetPixel(p);if(r != RGB(255,255,255) continue;dc.SetPixelV(p,RGB(0,255,0);r=dc.GetPixel(p.x+1,p.y);if(r = RGB(255,255,255) & r!=RGB(0,255,0)stackt

21、op.x=p.x+1;stacktop.y=p.y;top+;r=dc.GetPixel(p.x-1,p.y);if(r = RGB(255,255,255) & r!=RGB(0,255,0)stacktop.x=p.x-1;stacktop.y=p.y;top+;r=dc.GetPixel(p.x,p.y+1);if(r = RGB(255,255,255)& r!=RGB(0,255,0)stacktop.x=p.x;stacktop.y=p.y+1;top+;r=dc.GetPixel(p.x,p.y-1);if(r = RGB(255,255,255) & r!=RGB(0,255,0)stacktop.x=p.x;stacktop.y=p.y-1;top+;void CGraDesignView:Ontobig() type = 6;推薦IT學(xué)長(zhǎng)淘寶日用品店5302131需求分析本程序?qū)?shí)現(xiàn)多功能畫板的功能:1,畫線功能,而且畫的線要具備反走樣功能。2, 利用上面的畫線功能實(shí)現(xiàn)畫矩形,橢圓,多邊形,并且可以對(duì)這些圖形進(jìn)行填充。3,可以對(duì)選中區(qū)域的圖形放大,縮小,平移,旋轉(zhuǎn)等功能。

溫馨提示

  • 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)論