非均勻B樣條擬合MATLAB程式

2021-09-08 19:33:39 字數 2423 閱讀 3052

直接上**,多的不再說了。

1、寫乙個base函式

function result =bbase(i,k,u,t)

%第i段k次b樣條基,deboor遞推遞迴演算法

%t為變數,u(i)<=t1),k=0時result=1

;if(k==0

)

if(u(i)<=t && t1))%注意1=u(i)<=t1)=1時的情況,這裡要用t<=u(i+1

); result=1

;

return

;

else

result=0

;

return

; end

else

if(u(i+k)-u(i)==0

) alpha=0

;

else

alpha=(t-u(i))/(u(i+k)-u(i));

endif(u(i+k+1)-u(i+1)==0

) beta=0

;

else

beta=(u(i+k+1)-t)/(u(i+k+1)-u(i+1

)); end

endresult=alpha*bbase(i,k-1,u,t)+beta*bbase(i+1,k-1,u,t);

2、b樣條程式
%------------------非均勻b樣條擬合matlab程式-----------------clear

k=3;

x=load('

data.txt');

[n,m]=size(x);

%-----------弦長引數化--------------------------------------u(k+n)=0

;for i=1:n-1

u(k+i+1)=u(k+i)+sqrt((x(i+1,1)-x(i,1))^2+(x(i+1,2)-x(i,2))^2

);end;

l=u(n+k);

for i=1

:nu(k+i)=u(k+i)/l;

end;

for i=1:3

u(k+i+n)=1

;end

%控制多邊線

plot(x(:,

1),x(:,2),'o'

);hold on

%------------反求n+2個控制點--------------------

%首位重節點v1=v2

%首位與控制多邊形相切

a=zeros(n+2

);a(

1,1)=1;a(1,2)=-1;a(

2,2)=1

;a(n+2,n+1)=-1;a(n+2,n+2)=1

;a(n+1,n+1)=1

;for i=3

:n

for j=0:2

a(i,i+j-1)=base(i+j-1,k,u,u(i+2

)); end

end%e:方程右邊.

e=0;

for i=1

:m e(n+2,i)=0

;end

for i=1

:n e(i+1,:)=x(i,:);

end%求出控制點d

d=inv(a)*e;

plot(d(:,

1),d(:,2),'g'

);hold on

%------------插值並作出樣條曲線-----------------x=0;y=0;down=0

;for j=1:(n-1

) uu=(u(j+3)):0.0005:u(j+4

);

for kk=1

:length(uu)

down=down+1

; x(down)=d(j,1)*base(j,3,u,uu(kk))+d(j+1,1)*base(j+1,3,u,uu(kk))+d(j+2,1)*base(j+2,3,u,uu(kk))+d(j+3,1)*base(j+3,3

,u,uu(kk));

y(down)=d(j,2)*base(j,3,u,uu(kk))+d(j+1,2)*base(j+1,3,u,uu(kk))+d(j+2,2)*base(j+2,3,u,uu(kk))+d(j+3,2)*base(j+3,3

,u,uu(kk));

endendaxis(

'equal');

plot(x,y,

'red');

xlabel('x

');ylabel('y'

);grid on

參考文章

3次非均勻b樣條擬合程式

非均勻B樣條擬合MATLAB程式

update on 20.6.14 直接上 多的不再說了。1 寫乙個base函式 檔案儲存為base.m檔案 function result base i,k,u,t 第i段k次b樣條基,deboor遞推遞迴演算法 t為變數,u i t2 b樣條程式 檔案隨便儲存為乙個指令碼檔案即可,如demo.t...

b樣條和三次樣條 B樣條 貝塞爾曲線和b樣條曲線

在數學的子學科數值分析裡,b 樣條是樣條曲線一種特殊的表示形式。它是b 樣條基曲線的線性組合。b 樣條是貝茲曲線的一種一般化,可以進一步推廣為非均勻有理b樣.b樣條就相當於乙個函式,這個函式在係數不同時就可以變化成各種曲線形狀.在實際生產中,我們測量得到的是乙個個離散的點,那麼我們要知道相鄰兩個點之...

B樣條函式

給定節點ni 0,記其上分片 k 次多項式 k 1次連續可導函式構成的空間為 s 顯然任意s s 應有s x i 0k cixi 1k i 1 n 1d i x i k 其中 max 從此可看出 dims k n,然而這個形式的基底為全域性的,其支撐並不區域性,故無法避免大數加小數的誤差。以下尋找 ...