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

end

axis equal

------------------------------------------------------------------

另外:

Matlab 样条工具箱(Spline ToolBox)

Matlab样条工具箱中的函数提供了样条的建立,操作,绘制等功能;

一. 样条函数的建立

第一步是建立一个样条函数,曲线或者曲面。这里的样条函数,根据前缀,分为4类:

cs* 三次样条

pp* 分段多项式样条,系数为t^n的系数

sp* B样条, 系数为基函数B_n^i(t)的系数

rp* 有理B样条

二. 样条操作

样条操作包括:函数操作:求值,算术运算,求导求积分等等

节点操作:主要是节点重数的调节,设定,修改等等

三. 简单示例

% step1: load ctrlpoints and knots

load data_example

% step 2: create the spline

sp = spmak(knots,ctrlpoints');

fnplt(sp,[knots(5),knots(42)]);

% step 3: get points on the

curve

dt = knots(5):3:knots(42);

p = fnval(sp,dt);

plot(p(1,:),p(2,:),'.g')

% step 4: get dir draw normals

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

end

附:样条工具箱函数

1. 三次样条函数 csapi 插值生成三次样条函数 csape 生成给定约束条件下的三次样条函数 csaps 平滑生成三次样条函数 cscvn 生成一条内插参数的三次样条曲线 getcurve 动态生成三次样条曲线

2.

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

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

4. 有理样条函数 rpmak 生成有理样条函数 rsmak 生成有理样条函数

5. 样条操作函数 fnval 计算在给定点处的样条函数值 fmbrk 返回样条函数的某一部分(如断点或系数等) fncmb 对样条函数进行算术运算 fn2fm 把一种形式的样条函数转化成另一种形式的样条函数 fnder 求样条函数的微分(即求导数) fndir 求样条函数的方向导数 fnint 求样条函数的积分 fnjmp 在间断点处求函数值 fnplt 画样条曲线图 fnrfn 在样条曲线中插入断点。 fntlr 生成tarylor系数或taylor多项式

6. 样条曲线端点和节点处理函数 augknt 在已知节点数组中添加一个或多个节点 aveknt 求出节点数组元素的平均值 brk2knt 增加节点数组中节点的重次 knt2brk 从节点数组中求得节点及其重次 knt2mlt 从节点数组中求得节点及其重次 sorted 求出节点数组的元素在另一节点数组中属于第几个分量 aptknt 求出用于生成样条曲线的节点数组 newknt 对分段多项式样条函数进行重分布 optknt 求出用于内插的最优节点数组 chbpnt 求出用于生成样条曲线的合适节点数组

转自:http://blog.csdn.net/wuzoujing/article/details/4943251

基于Matlab的双三次有理B样条曲面

xc=[1,1,2,1;4,4,4,4;7,6,7,8;10,9,10,9;];

yc=[1,3,6,9;0,3,6,10;0,3,6,9;1,4,7,10;];

zc=[3,5,5,2;4,6,7,4;4,7,6,5;2,4,5,4];%给出控制点坐标

%下面计算基函数

i=0; %i表示点的标号

for u=0:0.01:1

for

v=0:0.01:1

i=i+1;

a1=1/6*(1-3*u+3*u.*u-u.*u.*u);

a2=1/6*(4-6*u.*u+3*u.*u.*u);

a3=1/6*(1+3*u+3*u.*u-3*u.*u.*u);

a4=1/6*u.*u.*u;

b1=1/6*(1-3*v+3*v.*v-v.*v.*v);

b2=1/6*(4-6*v.*v+3*v.*v.*v);

b3=1/6*(1+3*v+3*v.*v-3*v.*v.*v);

b4=1/6*v.*v.*v;

xq(i)=[a1 a2 a3 a4]*xc*[b1;b2;b3;b4];%曲面上点的坐标赋值

yq(i)=[a1 a2 a3 a4]*yc*[b1;b2;b3;b4];

zq(i)=[a1 a2 a3 a4]*zc*[b1;b2;b3;b4];

end

end

mesh(xc,yc,zc);%控制点的网格

hidden;

hold on;

plot3(xq,yq,zq);%生成曲面

b1=[2,2];b2=[3,5];b3=[5,6];b4=[7,3];%四个型值点的横纵坐标值

可以自定

plot([b1(1),b2(1),b3(1),b4(1)],[b1(2),b2(2),b3(2),b4(2)],'o');%画出型值点

hold on;

N=[5 1 0 0;1 4 1 0;0 1 4 1;0 0 1 5];

P=N(6*([b1;b2;b3;b4]));%P是二维数组 存放控制点 求出P

xc1=P(1); %对应6个控制点

xc2=P(2);

xc3=P(3);

xc4=P(4);

yc1=P(5);

yc2=P(6);

yc3=P(7);

yc4=P(8);

plot([xc1,xc2,xc3,xc4],[yc1,yc2,yc3,yc4],'*')%画出控制点

hold on;

plot([xc1,xc2,xc3,xc4],[yc1,yc2,yc3,yc4])%连接控制点

hold on;

u=0:0.01:1;

N1=1/6*(1-3*u+3*u.*u-u.*u.*u);%基函数

N2=1/6*(4-6*u.*u+3*u.*u.*u);

N3=1/6*(1+3*u+3*u.*u-3*u.*u.*u);

N4=1/6*u.*u.*u;

xp=xc1.*N1+xc1.*N2+xc2.*N3+xc3.*N4;

yp=yc1.*N1+yc1.*N2+yc2.*N3+yc3.*N4;

plot(xp,yp);%正算第一段B样条

hold on;

xp=xc1.*N1+xc2.*N2+xc3.*N3+xc4.*N4;

yp=yc1.*N1+yc2.*N2+yc3.*N3+yc4.*N4;

plot(xp,yp);%正算第二段B样条

hold on;

xp=xc2.*N1+xc3.*N2+xc4.*N3+xc4.*N4;

yp=yc2.*N1+yc3.*N2+yc4.*N3+yc4.*N4;

plot(xp,yp);%正算第三段B样条

hold on;

matlab绘制均匀b样条曲线_[转载]用matlab实现B样条曲线相关推荐

  1. 如何用matlab进行部分式展开_[转载]用MATLAB进行部分分式展开

    为了方便LAPLACE反变换,先对F(s)进行部分分式展开.根据F(s)分为具有不同极点的部分分式展开和具有多重极点的部分分式展开.分别讨论. 不同极点的部分分式展开: F(s)=B(s)/A(s)= ...

  2. matlab符号函数绘图法_转载:MATLAB 符号函数作图

    1 符号函数的等高线图 1) ezcontour(f) : 画出二元符号函数 f=f(x,y) 的等高线图. 函数 f 将被显示于默认的平面区域 [-2pi 系统将根据函数变动的激烈程度自动选择相应的 ...

  3. stem什么意思matlab,matlab中stem函数用法_常见问题解析,matlab

    matlab中如何自定义图例_常见问题解析 matlab中自定义图例的方法:首先打开matlab软件:然后点击勾选按钮,新建一个文件并输入代码为"x = 0:pi/50:2*pi;" ...

  4. matlab不用科学计算法表示_科学网—MATLAB小技巧总结 - 李金磊的博文

    ①如何保存命令行窗口的历史命令? 打开MATLAB,进入主页:新建脚本文件,即"*.m"文件,这时会自动弹出"编辑器"窗口. 我们可以在脚本文件(编辑器)窗口中 ...

  5. matlab绘制系统函数频率特性,实验七用MATLAB进行系统频率特性曲线绘制

    实验七用MATLAB进行系统频率特性曲线绘制 自动控制原理 课程验证性实验报告 实验名称 用MATLAB进行系统频率特性曲线绘制 实验时间 2013年 05月30日 学生姓名 实验地点 070312 ...

  6. matlab如何创建callback函数_如何学好MATLAB GUI

    差不多有一个月的时间没有写一些总结了,所以今天打算聊聊之前写的几篇文章. 8月可以说是我的GUI月,因为发的4篇文章,全是关于GUI的. 这可能就是我写文章的一个陋习,写起GUI就是连着好几篇,写爬虫 ...

  7. 如何在matlab里输入复杂公式_[转载]如何在Matlab绘制的图形中显示复杂公式

    Matlab文本的Interpreter属性使我们能在图形中显示一个较为复杂的公式,例如在公式中除了有希腊字母外,还有分号.根号等数学符号. 当键入:>> set(text,'Interp ...

  8. matlab将二值图像与原图重叠_[转载]图像处理matlab及图像融合图像镶嵌图像拼接...

    在实际的对图像处理过程中,由于我们读出的图像是unit8型,而在MATLAB的矩阵运算中要求所有的运算变量为double型(双精度型).因此读出的图像数据不能直接进行相加求平均,因此必须使用一个函数将 ...

  9. matlab读int16读文件_[转载]Matlab中的textread textscan读取文本文件

    1.MATLAB从文本文件中读取格式化的数据函数是textread. 调用方式 [A,B,C,...] = textread('filename','format') [A,B,C,...] = te ...

  10. matlab中单独存图_[转载]matlab中保存图片的方法

    matlab中保存图片的方法 一.一种是出来图形窗口后手动保存(这儿又可以分两种): 1 直接从菜单保存,有fig,eps,jpeg,gif,png,bmp等格式. 2 edit------〉copy ...

最新文章

  1. Java并发编程:JMM和volatile关键字
  2. k近邻算法api初步使用
  3. java中正则表达式 ?=_Java中的正则表达式
  4. dsp指令ixh_第一章 DSP入门教程(非常经典).pdf
  5. AOE网上的关键路径
  6. js foreach用法_使用 nodejs 写爬虫(一): 常用模块和 js 语法
  7. [C入门 - 游戏编程系列] 贪吃蛇篇(四) - 食物实现
  8. try_catch_异常处理的第二种方式,自己处理异常
  9. STL中的lower_bound和upper_bound的理解
  10. linux下槽函数的响应时间,Qt信号与槽之connectSlotsByName函数
  11. android屏幕漂移,手机屏幕不受控制乱跳 触屏“飘逸”的解决方法
  12. ios icon 自动生成
  13. Column ‘XXX‘ not found完美解决
  14. Java编程思想第十章内部类的10.7至10.8小节的笔记和练习题
  15. 超鸿蒙 混希夷 寂寥,下列句子与“故凡为愚者.莫我若也 的句式不同的一项是 A.超鸿蒙.混希夷.寂寥而莫我知也 B.而良人未之知也 C.及长.不省所怙.惟兄嫂是依 D.王语暴以好乐...
  16. [vuex] expects string as the type, but found object.
  17. win10:谷歌浏览器如何导出扩展程序
  18. 湖北武汉劳务员考试建筑施工企业的劳务实名制建筑七大员考试
  19. python 识别人名_HanLP中人名识别分析
  20. 2021最新 2小时搭建属于自己的游戏服务器—《泰拉瑞亚篇》

热门文章

  1. 希尔伯特变换(1)-基础理论
  2. 2022年国内短信平台大全
  3. 监狱人员定位管理,提升智慧监狱信息化水平
  4. 光环PMP下午茶做题时间
  5. MATLAB 2017b 安装教程,这一篇文章就够了。强烈推荐!!!!!
  6. 德标螺纹规格对照表_(外)内六角螺塞标准编号-国家标准JB/德标DIN
  7. 终端一直显示 (master) ,即终端一直处于master分支下的取消办法
  8. 解决ThinkServer TS250中网卡在centos6.5中没有安装驱动
  9. 联想 Thinkserver TS250服务器RAID1 重建测试
  10. 雷达信号处理基础ppt