Matlab样条工具箱及曲线拟合

工具箱介绍

Matlab样条工具箱提供了样条的建立、操作、绘制等功能.

样条函数的建立

建立一个样条曲线或曲面,根据前缀可分为4类:

前缀类别
cs*三次样条
pp*分段多项式样条
sp*B样条,系数为基函数系数
rp*有理B样条

样条操作

  • 函数操作:求值、求导数、求积分等;
  • 节点操作:节点重数的设定、修改等.

样条工具箱函数

1.三次样条函数

名称功能
csapi插值生成三次样条函数
csape生成给定约束条件的三次样条函数
csaps平滑生成三次样条函数
getcurve动态生成三次样条函数

2.分段多项式样条函数

名称功能
ppmak生成分段多项式样条函数
ppual计算在给定点处的分段多项式样条函数值

3.B样条函数

名称功能
spmak生成B样条函数
spcrv生成均匀划分的B样条函数
spapi插值生成B样条函数
spap2用最小二乘法拟合生成B样条函数
spaps对生成的B样条曲线进行光滑处理
spcol生成B样条函数的配置矩阵

4.有理样条函数

名称功能
rpmak生成有理样条函数
rsmak生成有理B样条函数

5.样条操作函数

名称功能
fnval计算在给定点处样条函数值
fmbrk返回样条函数的某一部分
fnder求样条函数的导数
fndir求方向导数
fnint求积分
fnplt画样条曲线图

6.样条曲线端点和节点处理函数

名称功能
augknt在已知节点数组中添加一个或多个节点
aveknt求出节点数组元素平均值
brk2knt增加节点数组中节点的重数
knt2brk从节点数组中求得节点及重数
aptknt求出用于生成样条曲线的节点数组
newknt对多项式样条函数进行重分布
chbpnt求出用于生成样条曲线的合适节点数组

应用实例

注记:节点向量元素个数=B样条基函数阶数+控制顶点个数n+2.

给定控制顶点及节点向量,绘制三次B样条曲线,求出给定点处样条函数值,并绘制对应位置B样条曲线的法向量.

源代码如下

%Spline ToolBox
%绘制三次B样条曲线
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,'go-'); %绘制控制顶点 
hold on

sp=spmak(knots,ctrlpoints); %生成B样条函数
fnplt(sp,[knots(1),knots(13)]); %根据所有节点,画样条曲线图
hold on

dt=knots(1):1:knots(13);
p=fnval(sp,dt);%计算在给定点处样条函数值
plot(p(1,:),p(2,:),'*y');

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([p(1,i),p(1,i)+dir(1)],[p(2,i),p(2,i)+dir(2)],'r'); %切矢

    plot([p(1,i),p(1,i)+dir(2)],[p(2,i),p(2,i)-dir(1)],'k');%法向量
end
axis equal

运行结果如图所示:

BsplineToolBox

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值