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

下載本文檔

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

文檔簡介

本文格式為Word版,下載可任意編輯——圖形學(xué)課設(shè)報(bào)告題目:

武漢工業(yè)學(xué)院

《計(jì)算機(jī)圖形學(xué)》課程設(shè)計(jì)

繪制三次Bezier曲線,三次B樣條曲線和Cantor圖

指導(dǎo)老師:劉文濤姓名:龐璐學(xué)號:070505129

院(系):計(jì)算機(jī)與信息工程系

專業(yè):軟件工程

完成日期:2023年1月4日

一.課題題目介紹

設(shè)計(jì)任務(wù)9:

1)給定下圖所示的四個(gè)控制點(diǎn):P0=(228,456),P1=(294,247),P2=(452,123),P3=(705,197)。分別繪制三次Bezier曲線和三次B樣條曲線。

2)使用VC編程,在窗口中一次繪制n=0~5的所有Cantor

圖。

二.整體功能及設(shè)計(jì)

1)主模塊:Bezier,B樣條,cantor集算法的實(shí)現(xiàn)。2)響應(yīng)模塊:a.Bezier,B樣條,cantor集的鼠標(biāo)響應(yīng);

b.Bezier,B樣條,cantor集的菜單和提醒對話框響應(yīng)。c.Bezier,B樣條,cantor集的快捷按鈕響應(yīng)。

3)附加功能模塊:曲線顏色的選擇。

繪圖主模塊響應(yīng)模塊附加功能模塊算法描述:

Bezier曲線功能描述:

點(diǎn)擊相應(yīng)菜單,彈出提醒對話框,繼而可以實(shí)現(xiàn)鼠標(biāo)取點(diǎn),繪出Bezier曲線和B樣條曲線;選擇cantor集菜單在彈出的對話框中輸入n的值,隨即繪出cantor集圖形。

三.編程實(shí)現(xiàn)

1.屬性和方法的定義:

classCMy070505129View:publicCView{

protected://createfromserializationonlyCMy070505129View();

DECLARE_DYNCREATE(CMy070505129View)

//Attributes

boolmousestate;//鼠標(biāo)狀態(tài)標(biāo)志CPointcp[4];//頂點(diǎn)inti;//控制多邊形頂點(diǎn)intm;//判斷函數(shù)

intMaxX,MaxY;//屏幕x和y的最大坐標(biāo)intn;//遞歸深度

COLORREFccolor;//設(shè)置顏色值public:

CMy070505129Doc*GetDocument();

//Operations

voidDrawBezier();//Bezier函數(shù)voidDrawByangtiao();//B樣條函數(shù)

voidCantor(double,double,double,double,int);//cantor函數(shù)

2.頭文件:

#include\

#include\

#include\#include\#include\#include\#include\

#defineROUND(x)int(x+0.5)//四舍五入

3.方法實(shí)現(xiàn):

CMy070505129View::CMy070505129View(){//部分?jǐn)?shù)據(jù)初始化

mousestate=false;i=0;

cp[0].x=0;cp[0].y=0;cp[1].x=0;cp[1].y=0;cp[2].x=0;cp[2].y=0;cp[3].x=0;cp[3].y=0;}

voidCMy070505129View::DrawBezier()//Bezier函數(shù){

CClientDCdc(this);//設(shè)備上下文doublet=0.0;

//Bezier算法實(shí)現(xiàn)while(t<1.0){double

ptx=((-(t*t*t))+3*t*t-3*t+1)*(double)cp[0].x+(3*t*t*t-6*t*t+3*t)*(double)cp[1].x+((-(3*t*t*t))+3*t*t)*(double)cp[2].x+t*t*t*(double)cp[3].x;double

pty=((-(t*t*t))+3*t*t-3*t+1)*(double)cp[0].y+(3*t*t*t-6*t*t+3*t)*(double)cp[1].y+((-(3*t*t*t))+3*t*t)*(double)cp[2].y+t*t*t*(double)cp[3].y;

dc.SetPixel((int)(ptx+0.5),(int)(pty+0.5),ccolor);//ccolor為顏色變量t+=1/10000.0;//步長}}

voidCMy070505129View::DrawByangtiao()//B樣條函數(shù){

CClientDCdc(this);//設(shè)備上下文

doublet=0.0,x,y;//局部變量t為步長,x,y為每次曲線相應(yīng)的點(diǎn)dc.MoveTo(cp[0]);//繪制四個(gè)控制點(diǎn)組成的四條線for(inti=1;i<4;i++){

dc.LineTo(cp[i]);}

//B樣條算法實(shí)現(xiàn)while(t<1.0){

doubleF0=(-(t*t*t)+3*t*t-3*t+1)/6.0;doubleF1=(3*t*t*t-6*t*t+4)/6.0;

doubleF2=(-3*(t*t*t)+3*t*t+3*t+1)/6.0;doubleF3=t*t*t/6.0;

x=cp[0].x*F0+cp[1].x*F1+cp[2].x*F2+cp[3].x*F3;y=cp[0].y*F0+cp[1].y*F1+cp[2].y*F2+cp[3].y*F3;

dc.SetPixel((int)(x+0.5),(int)(y+0.5),ccolor);//ccolor為顏色變量t+=1/1000.0;//步長

}}

voidCMy070505129View::Cantor(doubleax,doubleay,doublebx,doubleby,intx)//cantor函數(shù){

doublecx,dx,cy,dy;//cantor中間點(diǎn)座標(biāo)CClientDCdc(this);//設(shè)備上下文if(x==0){dc.MoveTo(ROUND(ax),ROUND(ay+MaxY/2));dc.LineTo(ROUND(bx),ROUND(by+MaxY/2));return;}

//遞歸

cx=ax+(bx-ax)/3;cy=ay;

Cantor(ax,ay,cx,cy,x-1);

dx=ax+2*(bx-ax)/3;dy=by;Cantor(dx,dy,bx,by,x-1);}

voidCMy070505129View::OnBezier()//菜單響應(yīng)函數(shù){

//TODO:Addyourcommandhandlercodeheremousestate=true;//重新設(shè)制鼠標(biāo)狀態(tài)CBezierbezier;//定義對話框類對象bezier.DoModal();//響應(yīng)

m=1;//標(biāo)記值,雙擊時(shí)調(diào)用相應(yīng)的函數(shù)Invalidate();}

voidCMy070505129View::OnByangtiao()//菜單響應(yīng)函數(shù){

//TODO:Addyourcommandhandlercodeheremousestate=true;//重新設(shè)制鼠標(biāo)狀態(tài)

CByangtiaoByangtiao;//定義對話框類對象Byangtiao.DoModal();//響應(yīng)

m=2;//標(biāo)記值,雙擊時(shí)調(diào)用相應(yīng)的函數(shù)Invalidate();}

voidCMy070505129View::OnLButtonDown(UINTnFlags,CPointpoint)//單擊獲取控制點(diǎn)函數(shù){

if(mousestate){//獲取x坐標(biāo)cp[i].x=point.x;//獲取y坐標(biāo)cp[i

溫馨提示

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

評論

0/150

提交評論