直接上**,多的不再說了。
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程式-----------------cleark=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,然而這個形式的基底為全域性的,其支撐並不區域性,故無法避免大數加小數的誤差。以下尋找 ...