計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報告3_第1頁
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報告3_第2頁
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報告3_第3頁
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報告3_第4頁
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報告3_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報告實(shí)驗(yàn)七 曲線的生成算法一、實(shí)驗(yàn)教學(xué)目標(biāo)與基本要求1. 掌握曲線生成的基本算法原理;2. 能實(shí)現(xiàn)曲線的生成;3. 掌握課本所介紹的圖形算法的原理和實(shí)現(xiàn)。二、理論基礎(chǔ)實(shí)現(xiàn)bezier曲線和b樣條曲線生成算法。 1. bezier曲線生成算法實(shí)現(xiàn)(參見教材p304306):三次bezier曲線及de casteljau算法。 2. b樣條曲線生成算法實(shí)現(xiàn)(參見教材p314316): b樣條曲線的分割,節(jié)點(diǎn)插入算法(選做)。三算法設(shè)計(jì)與分析(1)bezier曲線生成算法實(shí)現(xiàn)一次bézier曲線根據(jù)n次bézier曲線定義公式,當(dāng)n=1時,有: 當(dāng)n=2時 此式說

2、明二次berzier曲線對應(yīng)一條起點(diǎn)在p0,終點(diǎn)在p2處的拋物線,即有p(0)=p0,p(1)=p2,p'(0)=2(p1-p0),p'(1)=2(p2-p1)。三次bézier曲線 當(dāng)n=3時 ,有三次bézier曲線 :由此可得三次berzier的矩陣表達(dá)式p(t)=tmzp0 p1 p2 p3t=tmzp若令s=1-t, 則把三次berzier曲線p(t)改寫成p(t)=(c30sp0+ c31tp1)s+ c32t2p2+ c33t3p3。(2) bézier曲線的分割遞推casteljau算法拋物線的三切線定理:設(shè)p0、p02、p2是一條

3、拋物線上順序三個不同的點(diǎn)。過p0和p2點(diǎn)的兩切線交于p1點(diǎn),在p02點(diǎn)的切線交p0p1和p2p1于p01和p11,則如下比例成立: bézier曲線的de casteljau算法 給定空間n+1個點(diǎn)pi(i=0,1,n)及參數(shù)t,有: 上式中,pi0=pi是定義bezier曲線的控制點(diǎn),p0n即為曲線p(t)上具有參數(shù)t的點(diǎn)。 de casteljau算法穩(wěn)定可靠,直觀簡便,可以編出十分簡捷的程序,是計(jì)算bezier曲線的基本算法和標(biāo)準(zhǔn)算法。 當(dāng)n=3時,de casteljau算法遞推出的pik呈直角三角形,如圖所示。從左向右遞推,最右邊點(diǎn)p03即為曲線上的點(diǎn)(3) .b樣條曲線生

4、成算法實(shí)現(xiàn)b樣條曲線的矩陣表示當(dāng)k=1時,則有一次b樣條曲線的基函數(shù)如下 :則pi,1(u)=n1,1(u)pi+ n2,1(u)pi+1一次b樣條曲線是由每相鄰兩個頂點(diǎn)構(gòu)造出一段直線段集。取k=2,則有二次b樣條曲線的基函數(shù)空間相鄰的每三個頂點(diǎn)可構(gòu)造出一段二次b樣條曲線,其中第i段可表示成取k=3,則有三次b樣條曲線的基函數(shù)如下:三次b樣條曲線段為:四、程序調(diào)試及結(jié)果的分析本程序運(yùn)行環(huán)境為vc下的mfc環(huán)境。本實(shí)驗(yàn)將列出三次bezier曲線及de casteljau算法和b樣條曲線的源代碼。實(shí)驗(yàn)代碼:(1). 三次bezier曲線源碼double cquxianhuafaview:b03(d

5、ouble t)return(pow(1-t,3);double cquxianhuafaview:b13(double t)return(3*t*pow(1-t,2);double cquxianhuafaview:b23(double t)return(3*(1-t)*t*t);double cquxianhuafaview:b33(double t)return(t*t*t); cpen penred(ps_solid,1,rgb(255,0,0); cpen penblue(ps_solid,1,rgb(0,0,255);cpen pengreen(ps_solid,1,rgb(0,2

6、55,0); / 設(shè)置控制點(diǎn),繪出特征多邊形 x0=220;y0=10;x1=410;y1=10;x2=225;y2=150;x3=410;y3=100; pdc->selectobject(penblue); /使用藍(lán)色畫筆 pdc->moveto(x0,y0); pdc->lineto(x1,y1); pdc->lineto(x2,y2); pdc->lineto(x3,y3); /繪制 bezier 曲線 pdc->moveto(x0,y0); t=0; dt=0.01;/t 從 0 到 1,每步增加 0.01,取 100 個點(diǎn) pdc->sel

7、ectobject(penred); /使用紅色畫筆 for (i=0;i<=100;i+) curx=(int)(b03(t)*x0+b13(t)*x1+b23(t)*x2+b33(t)*x3); cury=(int)(b03(t)*y0+b13(t)*y1+b23(t)*y2+b33(t)*y3); pdc->lineto(curx,cury); t=t+dt;(2)de casteljau算法源碼void cquxianhuafaview:bez_to_points(cdc*pdc)point points;float t, delt;int i;/void decas(in

8、t , point , float );delt = 1.0 / (float) npoints;t = 0.0;for(i=0; i<=npoints; i+)decas(t);points.x = temp.x;points.y = temp.y;t = t + delt;/pdc->setpixel(points.x, points.y, color);pdc->lineto(points.x,points.y);void cquxianhuafaview:decas(float t)int r, i;float t1;point coeffa10;t1 = 1.0 -

9、 t;for(i=0; i<=degree; i+) coeffai.x = coeffi.x;coeffai.y = coeffi.y;for(r=1; r<=degree; r+)for(i=0; i<=degree-r; i+)coeffai.x = t1 * coeffai.x + t * coeffai+1.x;coeffai.y = t1 * coeffai.y + t * coeffai+1.y;temp.x = coeffa0.x;temp.y = coeffa0.y;(3)b樣條曲線的源代碼void cquxianhuafaview:bspl_to_poin

10、ts(cdc *pdc)cpen penblue(ps_solid,1,rgb(0,0,255);cpen pengreen(ps_solid,1,rgb(0,255,0); float px10=20,75,122,187,225,242,280,318,349,402;float py10=298,465,354,352,443,498,302,402,448,330;float a0,a1,a2,a3,b0,b1,b2,b3;int k,x,y;float i,t,dt;int n=10;dt=1/(float)n;pdc->selectobject(pengreen);for(k

11、=0;k<n;k+)if(k=0)pdc->moveto(pxk,pyk);pdc->lineto(pxk,pyk);pdc->selectobject(penblue);for(k=0;k<n-3;k+)a0=(pxk+4*pxk+1+pxk+2)/6;a1=(pxk+2-pxk)/2;a2=(pxk-2*pxk+1+pxk+2)/2;a3=-(pxk-3*pxk+1+3*pxk+2-pxk+3)/6;b0=(pyk+4*pyk+1+pyk+2)/6;b1=(pyk+2-pyk)/2;b2=(pyk-2*pyk+1+pyk+2)/2;b3=-(pyk-3*pyk+1+3*pyk+2-pyk+3)/6;for(i=0.0;i<n;i+=0.05)t=i*dt;x=a0+a1*t+a2*t*t+a3*t*t*t;y=b0+b1*t+b2*t*t+b3*t*t*t;if(i=0.0) pdc->moveto(x,y);pdc->lineto(x,y);運(yùn)行結(jié)果展示:(1). 三次bezier曲線(2)de casteljau算法(3)b樣條曲線整體顯示如下:五實(shí)驗(yàn)心得及建議1.通過本次試驗(yàn),我進(jìn)一步加深了對于三次bezier曲線及de casteljau算法的理解。2

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論