版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 四年級數(shù)學(xué)(小數(shù)加減運(yùn)算)計(jì)算題專項(xiàng)練習(xí)與答案匯編
- 自愿加入保安協(xié)議書(2篇)
- 購銷協(xié)議書(2篇)
- 南京工業(yè)大學(xué)浦江學(xué)院《數(shù)字電子技術(shù)》2022-2023學(xué)年第一學(xué)期期末試卷
- 成都某招商會展中心裝修工程施工組織設(shè)計(jì)
- 方方圓圓說課稿
- 獨(dú)無的我說課稿
- 肝硬化失代償期
- 《氧化碳制取的研究》說課稿
- 南京工業(yè)大學(xué)浦江學(xué)院《工程招投標(biāo)與合同管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 音樂教師述職報(bào)告
- 英語語法入門筆記(崔榮容-)(共43頁)
- LS風(fēng)險(xiǎn)矩陣評價(jià)準(zhǔn)則(3頁)
- 機(jī)房維護(hù)表格-運(yùn)維部
- 安全標(biāo)識中英文可直接打印
- 小學(xué)四年級上冊音樂-第8課《龍里格龍》--人音版(簡譜)(19張)ppt課件
- 1π到100π表比較全
- 高中常用不規(guī)則動詞表(含音標(biāo))
- 初中知識結(jié)構(gòu)圖
- 中醫(yī)醫(yī)療技術(shù)操作規(guī)范
- ASTM_A29/A29M熱鍛及冷加工碳素鋼和合金鋼棒
評論
0/150
提交評論