我看到一个B样条的拟合程序,但有错误,到现在都没有人解决。现解决了,总结如下:
1、写一个Base函数:
function result =Base(i,k,u,t)
if k==0
if u(i)<=t && t
result=1;
return;
else
result=0;
return;
end
end
if u(i+k)-u(i)==0
alpha=0;
else
alpha=(t-u(i))/(u(i+k)-u(i));
end
if 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
result=alpha*Bbase(i,k-1,u,t)+beta*Bbase(i+1,k-1,u,t);
end
2、B样条程序:
%------------------非均匀B样条拟合MATLAB程序-----------------
clear
k=3;
x=load('data.txt');
[n,m]=size(x);
%-----------弦长参数化------------------------