MATLAB
样条工具箱可以通过节点获得样本函数值,但不能根据x求y或z,也不能求得样本曲线方程。例如:
ctrlpoints=[
0 -1.2 -1.6 -1.4
-1 -0.5 -0.35 -0.6
-1.6
-0.2 -0.5 -1 -1.5
-2.2 -2.7 -3.2 -3.7 -4.2];
knots=[0 0 0 0 1 2 3 4 5 6 6 6 6];
x0=ctrlpoints(1,:);
y0=ctrlpoints(2,:);
plot(x0,y0,'ro');%画所有控制点
hold on;
sp = spmak(knots,ctrlpoints);%生成B样条函数
fnplt(sp,[knots(1),knots(13)]);%根据所有节点,画样条曲线图
%fnplt(sp,'b*');
%hold on;
dt=knots(1):1:knots(13);
p = fnval(sp,dt);%计算在给定点处的样条函数值
plot(p(1,:),p(2,:),'*g');
dp1 = fnder(sp);%求样条函数的微分(即求导数)
dp = fnval(dp1,dt);
len = size(dt,2);
for i = 1:len
dir = dp(:,i);
scale = 1/sqrt(dir(1)^2+dir(2)^2);
dir = dir*scale;
plot