C++下的B樣條曲線_第1頁
C++下的B樣條曲線_第2頁
C++下的B樣條曲線_第3頁
C++下的B樣條曲線_第4頁
C++下的B樣條曲線_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、基本思路:namespacesp/樣條曲線曲面域名空間static doubleeps = 1.0e-8;/精 度設(shè)定精度void SetEps(double Eps)if(Eps b|a -b;/ k次規(guī)范B樣條基函數(shù)double N(int i,int k,double su,double u)if(k=0)if(u-su0 =sui&u 0)if(MBiger(sui+k-sui,eps)&MBiger(sui+k+1-sui+1,eps)return (u-sui)*N(i,k-1,su,u)/(sui+k-sui)+(sui+k+1-u)*N(i+1,k-1,su,u)/(sui+k

2、+1-sui+1);else if(!MBiger(sui+k-sui,eps)&MBiger(sui+k+1-sui+1,eps)return (sui+k+1-u)*N(i+1,k-1,su,u)/(sui+k+1-sui+1);else if(MBiger(sui+k-sui,eps)&!MBiger(sui+k+1-sui+1,eps)return (u-sui)*N(i,k-1,su,u)/(sui+k-sui);elsereturn0.0;elsereturn0.0;/B樣條曲線double BSL1(int k,double su,double d,int n,double u)

3、int i;double s=0.0;for(i=0;i n;i+)s=s+di*N(i,k,su,u);return s;德布爾算法計(jì)算B樣條曲線inline double alpha(int l,int j,int k,double su,double u)if(suj+k+1-l-suj -eps) return 0.0;return (u-suj)/(suj+k+1-l-suj);double d1(int l,int j,int k,double su,double d,double u)if(l =0) return dj;double a=alpha(l,j,k,su,u);re

4、turn (1-a)*d1(l-1,j-1,k,su,d,u)+a*d1(l-1,j,k,su,d,u);double BSL(int k,double su,double d,int n,double u)int i;for(i=1;i n+k;i+)if(u k&u=sui) break;i-; return d1(k,i,k,su,d,u);德布爾算法計(jì)算B樣條曲線的導(dǎo)矢double d2(int l,int j,int k,double su,double d,double u)if(l =0) return dj;double z=suj+k+1-l-suj;if(z -eps) r

5、eturn 0.0;return (k+1-l)*(d2(l-1,j,k,su,d,u)-d2(l-1,j-1,k,su,d,u)/z;double GetDerValue(int k,double su,double d,int n,int r,double u) int i,j;double s=0.0;for(i=1;i n+k;i+)if(u k&u=sui) break;i-;for(j=i-k+r;j =i;j+)s+=d2(r,j,k,su,d,u)*N(j,k-r,su,u); return s;/B樣條曲面double BSS(int k,double su,int l,do

6、uble sv,double *d,int m,double u,int n,double v) int i,j;double s=0.0;for(i=0;i m;i+)for(j=0;j n;j+)s=s+dij*N(i,k,su,u)*N(j,l,sv,v);return s;/NURBS 曲線double NURBSL(int k,double su,double d,double w,int n,double u) int i,t=k;double s1=0.0,s2=0.0,wN;for(i=0;i n+1;i+)if(u =sui)t=i-1;break;if(t k)t=k;fo

7、r(i=t-k;i eps|s2 -eps)return s1/s2;else return 0.0;/NURBS 曲面double NURBSS(int k,double su,int l,double sv,double *d,double *w,int m,double u,int n,double v) int i,j,tu=k,tv=l;double s1=0.0,s2=0.0,wN;for(i=0;i m+1;i+)if(u =sui)tu=i-1;break;for(j=0;j n+1;j+) if(v =svj)tv=j-1;break;if(tu k)tu=k;if(tv l

8、)tv=l;for (i=tu-k;i =tu;i+)for(j=tv-l;j eps|s2 -eps)return s1/s2;else return 0.0; /均勻B樣條曲線double UBSL(int k,double d,int n,double u)double s,*su=new doublen+k+1;int i;for (i=0;i n+k+1;i+)sui=double(i)/(n+k);s=BSL(k,su,d,n,u);delete su;return s; /準(zhǔn)均勻B樣條曲線doubleQUBSL(intk,double d,intn,double u)double

9、s,*su=newdoublen+k+1;int i;for(i=0;i k;i+)sui=0.0;for(i=k;i =n;i+) sui=double(i-k)/(n-k);for(i=n+1;i n+k+1;i+)sui=1.0;s=BSL(k,su,d,n,u);delete su;return s;/均勻B樣條曲面double UBSS(int k,int l,double *d,int m,double u,int n,double v)double s,*su=new doublem+k+1,*sv=new doublen+l+1;int i;for( i=0;i m+k+1;i

10、+) sui=double(i)/(m+k);for( i=0;i n+l+1;i+)svi=double(i)/(n+l);s=BSS(k,su,l,sv,d,m,u,n,v);delete su;delete sv;return s; /準(zhǔn)均勻B樣條曲面double QUBSS(int k,int l,double *d,int m,double u,int n,double v)double s,*su=new doublem+k+1,*sv=new doublen+l+1;int i;for(i=0;i k;i+)sui=0.0;for(i=k;i =m;i+) sui=double(

11、i-k)/(m-k);for(i=m+1;i m+k+1;i+)sui=1.0;for(i=0;i l;i+)svi=0.0;for(i=l;i =n;i+) svi=double(i-l)/(n-l);for(i=n+1;i n+l+1;i+)svi=1.0;s=BSS(k,su,l,sv,d,m,u,n,v);delete su;delete sv; return s; 非均勻三次B樣條Riesenfeld方法void RiBSL(double *dx,double *dy,int n,double u,double *x,double *y) int i;double *su=new doublen+3;double *l=new doublen;double L=0.0,l1;l0=0.0;for(i=1;i n;i+)li=sqrt(pow2(dx

溫馨提示

  • 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

提交評論