赞
踩
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
运行结果如图所示:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。