当前位置:   article > 正文

Matlab样条工具箱及曲线拟合_matlab 样条曲线

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

运行结果如图所示:

BsplineToolBox

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号