計算機圖形學專業課程設計作品_第1頁
計算機圖形學專業課程設計作品_第2頁
計算機圖形學專業課程設計作品_第3頁
計算機圖形學專業課程設計作品_第4頁
計算機圖形學專業課程設計作品_第5頁
已閱讀5頁,還剩17頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

《計算機圖形學Visualc++版》考試作業報告題目:計算機圖形學圖形畫板 專業:推薦IT學長淘寶日用品店530213 班級:推薦IT學長淘寶日用品店530213學號:推薦IT學長淘寶日用品店530213 姓名:推薦IT學長淘寶日用品店530213 指引教師:推薦IT學長淘寶日用品店530213完畢日期:12月2日一、課程設計目本課程設計目的就是要達到理論與實際應用相結合,提高學生設計圖形及編寫大型程序能力,并培養基本、良好計算機圖形學技能。設計中規定綜合運用所學知識,上機解決某些與實際應用結合緊密、規模較大問題,通過度析、設計、編碼、調試等各環節訓練,使學生深刻理解、牢固掌握計算機圖形學基本知識和算法設計基本技能術,掌握分析、解決實際問題能力。

通過這次設計,規定在加深對課程基本內容理解。同步,在程序設計辦法以及上機操作等基本技能和科學作風方面受到比較系統和嚴格訓練。二、設計內容推薦IT學長淘寶日用品店530213設計一種圖形畫板,在這個圖形畫板中要實現:畫線功能,并且畫線要具備反走樣功能。2,運用上面畫線功能實現畫矩形,橢圓,多邊形,并且可以對這些圖形進行填充。3,可以對選中區域圖形放大,縮小,平移,旋轉等功能。設計過程程序預解決:涉及頭文獻加載,常量定義以及全局變量定義#include"stdafx.h"#include"GraDesign.h"#include"GraDesignDoc.h"#include"GraDesignView.h"#include"math.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif//******自定義全局變量inttype=-1;CPointpoint1;CPointpoint2;CPointtemp[2];CPointremember;inti=0;///////////////////////////////////////////////推薦IT學長淘寶日用品店530213////////////////////////////////CGraDesignViewIMPLEMENT_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() ON_COMMAND(tobig,Ontobig) //}}AFX_MSG_MAP //Standardprintingcommands ON_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學長淘寶日用品店530213///////////////////////////////////////////////////CGraDesignViewconstruction/destructionCGraDesignView::CGraDesignView(){ //TODO:addconstructioncodehere}CGraDesignView::~CGraDesignView(){}BOOLCGraDesignView::PreCreateWindow(CREATESTRUCT&cs){ //TODO:ModifytheWindowclassorstylesherebymodifying //theCREATESTRUCTcs returnCView::PreCreateWindow(cs);}///////////////////////////////////////////////////////////////////////////////CGraDesignViewdrawingvoidCGraDesignView::OnDraw(CDC*pDC){ CGraDesignDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc); //TODO:adddrawcodefornativedatahere }///////////////////////////////////////////////////////////////////////////////CGraDesignViewprintingBOOLCGraDesignView::OnPreparePrinting(CPrintInfo*pInfo){ //defaultpreparation returnDoPreparePrinting(pInfo);}voidCGraDesignView::OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/){ //TODO:addextrainitializationbeforeprinting}voidCGraDesignView::OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/){ //TODO:addcleanupafterprinting}///////////////////////////////////////////////////////////////////////////////CGraDesignViewdiagnostics#ifdef_DEBUGvoidCGraDesignView::AssertValid()const{ CView::AssertValid();}voidCGraDesignView::Dump(CDumpContext&dc)const{ CView::Dump(dc);}CGraDesignDoc*CGraDesignView::GetDocument()//non-debugversionisinline{ ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGraDesignDoc))); return(CGraDesignDoc*)m_pDocument;}#endif//_DEBUG推薦IT學長淘寶日用品店530213畫直線:RunLine函數繪制任意斜率直線,并且添加反走樣算法,通過OnLButtonDown,OnLButtonUp函數記錄鼠標點擊位置//************畫線函數***********************voidCGraDesignView::RunLine(CPointCP0,CPointCP1){ CDC*pDC=GetDC(); CPointp,t; intx,y; doublee,k,e1; x=CP1.x-CP0.x; //斜率無窮 if(x==0) { if(CP0.y>CP1.y) { t=CP0; CP0=CP1; CP1=t; } p=CP0; while(p.y<CP1.y+1) { pDC->SetPixelV(p,RGB(0,0,0)); p.y++; } } else { y=CP1.y-CP0.y; k=double(y)/double(x); //斜率0至1 if(k>=0&&k<1) { //比較兩個點中X軸坐標大小 if(CP0.x>CP1.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.x<CP1.x+1){ e1=1-e; //反走樣畫兩個像素點 pDC->SetPixelV(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++; } } } //斜率不不大于1 if(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-CP1.y)/(CP0.x-CP1.x); e=1/k; while(p.x<CP1.x+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++; } } } //斜率-1至0 if(k<0&&k>-1) { if(CP0.x>CP1.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.x<CP1.x+1){ e1=1-e; pDC->SetPixelV(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--; } } } //斜率不大于等于-1 if(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-CP1.y)/(CP0.x-CP1.x); e=-1/k; while(p.y>CP1.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學長淘寶日用品店530213voidCGraDesignView::Onrectangle(){ type=2;}畫矩形:運用畫線功能通過實現RunRectangle函數畫出矩形//***************畫矩形函數****************************voidCGraDesignView::RunRectangle(CPointCP0,CPointCP1){ CDC*pDC=GetDC(); CPointCP2,CP3; //01在同一對角線,2和1在垂直方向,03在豎直方向 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); RunLine(CP1,CP3);}voidCGraDesignView::Onellipse(){ type=3;}畫橢圓:運用畫線功能通過實現RunEllipse函數畫出橢圓//***************畫橢圓函數****************************voidCGraDesignView::RunEllipse(CPointCP0,CPointCP1){ CDC*pDC=GetDC(); CRectrect; GetClientRect(&rect); pDC->SetMapMode(8); pDC->SetWindowExt(rect.Width(),rect.Height()); pDC->SetViewportExt(rect.Width(),-rect.Height()); pDC->SetViewportOrg((CP0.x+CP1.x)/2,(CP0.y+CP1.y)/2); ////////////////建立坐標軸////////////////////// doublea,b,d,d2,a2,b2; CPointp,p0; intendx,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); } else { while(p.x<endx) { pDC->SetPixelV(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,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(d2<0) { d2=d2+2*b2*p.x-2*a2*p.y+2*b2+3*a2; p.x++; } else { d2=d2-2*a2*p.y+3*a2; } } }}voidCGraDesignView::Onpolygon(){ type=4; }voidCGraDesignView::Onfill(){ type=5;}畫多邊形:運用畫線功能通過鼠標左鍵函數OnLButtonDown取點,用鼠標右鍵函數OnRButtonDown實現回到原點CPointtemp[2];CPointremember;inti=0; //多邊形1 if(4==type) { i++; temp[i%2]=point; if(1==i){remember=temp[i];return;} RunLine(temp[i%2],temp[(i+1)%2]); } //畫多邊形,按鼠標右鍵結束,并自動連接起始點,數據清零 RunLine(temp[i%2],remember); i=0; temp[0].x=0; temp[0].y=0; temp[1].x=0; temp[1].y=0; CView::OnRButtonDown(nFlags,point);填充:通過實現RunFill函數實現填充CPointstack[1000000];voidCGraDesignView::RunFill(CPointpoint){ CPointp; inttop; COLORREFr; CClientDCdc(this); top=0; stack[top]=point; top++; while(top!=0) { top--; p=stack[top]; 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)) { stack[top].x=p.x+1; stack[top].y=p.y; top++; } r=dc.GetPixel(p.x-1,p.y); if(r==RGB(255,255,255)&&r!=RGB(0,255,0)) { stack[top].x=p.x-1; stack[top].y=p.y; top++; } r=dc.GetPixel(p.x,p.y+1); if(r==RGB(255,255,255)&&r!=RGB(0,255,0)) { stack[top].x=p.x; stack[top].y=p.y+1; top++; } r=dc.GetPixel(p.x,p.y-1); if(r==RGB(255,255,255)&&r!=RGB(0,255,0)) { stack[top].x=p.x; stack[top].y=p.y

溫馨提示

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

評論

0/150

提交評論