直接上代码,多的不再说了。

1、写一个Base函数

  1. function result = Bbase(i,k,u,t)
  2. %第ikB样条基,Deboor递推递归算法
  3. %t为变量,u(i)<=t<u(i+),k=0result=;
  4. if(k==)
  5. if(u(i)<=t && t<u(i+))%注意1=u(i)<=t<u(i+)=1时的情况,这里要用t<=u(i+);
  6. result=;
  7. return;
  8. else
  9. result=;
  10. return;
  11. end
  12. else
  13. if(u(i+k)-u(i)==)
  14. alpha=;
  15. else
  16. alpha=(t-u(i))/(u(i+k)-u(i));
  17. end
  18. if(u(i+k+)-u(i+)==)
  19. beta=;
  20. else
  21. beta=(u(i+k+)-t)/(u(i+k+)-u(i+));
  22. end
  23. end
  24. result=alpha*Bbase(i,k-,u,t)+beta*Bbase(i+,k-,u,t);
  1. 2B样条程序
  1. %------------------非均匀B样条拟合MATLAB程序-----------------
  2. clear
  3. k=;
  4. x=load('data.txt');
  5. [n,m]=size(x);
  6. %-----------弦长参数化--------------------------------------
  7. u(k+n)=;
  8. for i=:n-
  9. u(k+i+)=u(k+i)+sqrt((x(i+,)-x(i,))^+(x(i+,)-x(i,))^);
  10. end;
  11. L=u(n+k);
  12. for i=:n
  13. u(k+i)=u(k+i)/L;
  14. end;
  15. for i=:
  16. u(k+i+n)=;
  17. end
  18. %控制多边线
  19. plot(x(:,),x(:,),'o');
  20. hold on
  21. %------------反求n+2个控制点--------------------
  22. %首位重节点v1=v2
  23. %首位与控制多边形相切
  24. A=zeros(n+);
  25. A(,)=;A(,)=-;
  26. A(,)=;
  27. A(n+,n+)=-;A(n+,n+)=;
  28. A(n+,n+)=;
  29. for i=:n
  30. for j=:
  31. A(i,i+j-)=Base(i+j-,k,u,u(i+));
  32. end
  33. end
  34. %e:方程右边.
  35. e=;
  36. for i=:m
  37. e(n+,i)=;
  38. end
  39. for i=:n
  40. e(i+,:)=x(i,:);
  41. end
  42. %求出控制点d
  43. d=inv(A)*e;
  44. plot(d(:,),d(:,),'g');
  45.  
  46. hold on
  47. %------------插值并作出样条曲线-----------------
  48. x=;y=;down=;
  49. for j=:(n-)
  50. uu=(u(j+)):0.0005:u(j+);
  51. for kk=:length(uu)
  52. down=down+;
  53. x(down)=d(j,)*Base(j,,u,uu(kk))+d(j+,)*Base(j+,,u,uu(kk))+d(j+,)*Base(j+,,u,uu(kk))+d(j+,)*Base(j+,,u,uu(kk));
  54. y(down)=d(j,)*Base(j,,u,uu(kk))+d(j+,)*Base(j+,,u,uu(kk))+d(j+,)*Base(j+,,u,uu(kk))+d(j+,)*Base(j+,,u,uu(kk));
  55. end
  56. end
  57. axis('equal');
  58.  
  59. plot(x,y,'red');
  60.  
  61. xlabel('x');ylabel('y');
  62. grid on

参考文章

3次非均匀B样条拟合程序

非均匀B样条拟合MATLAB程序的更多相关文章

  1. 蚁群算法 matlab程序(已执行)

    下面是解放军信息project大学一个老师编的matlab程序,请尊重原作者劳动,引用时请注明出处. 我经过改动添加了凝视,已经执行过,无误, function [R_best,L_best,L_av ...

  2. MATLAB程序:用FCM分割脑图像

    MATLAB程序:用FCM分割脑图像 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 脑图像基础知识请看:脑图像:FCM算法介绍请看:聚类——FCM:数据 ...

  3. mean shift聚类算法的MATLAB程序

    mean shift聚类算法的MATLAB程序 凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. mean shift 简介 mean shift, 写的 ...

  4. OpenFOAM——设置非均匀边界方法总结

    在使用OpenFOAM求解的时候我们经常需要设置非均匀的边界,比如我们在计算层流的时候,很多时候需要入口为充分发展的入口边界,下面我们就以入口处为充分发展的层流速度分布为总结OpenFOAM当中设定不 ...

  5. 【转】小波与小波包、小波包分解与信号重构、小波包能量特征提取 暨 小波包分解后实现按频率大小分布重新排列(Matlab 程序详解)

    转:https://blog.csdn.net/cqfdcw/article/details/84995904 小波与小波包.小波包分解与信号重构.小波包能量特征提取   (Matlab 程序详解) ...

  6. WPF:指定的命名连接在配置中找不到、非计划用于 EntityClient 提供程序或者无效的解决方法

    文/嶽永鹏 WPF 数据绑定中绑定到ENTITY,如果把数据文件做成一个类库,在UI文件中去应用它,可能遇到下面这种情况. 指定的命名连接在配置中找不到.非计划用于 EntityClient 提供程序 ...

  7. [zz]求一维序列的信息熵(香浓熵)的matlab程序实例

    对于一个二维信号,比如灰度图像,灰度值的范围是0-255,因此只要根据像素灰度值(0-255)出现的概率,就可以计算出信息熵.    但是,对于一个一维信号,比如说心电信号,数据值的范围并不是确定的, ...

  8. 条件随机场matlab程序下载

    19:44:23 1 http://www.cs.ubc.ca/~murphyk/Software/CRF/crf.html matlab程序包: 该条件随机场程序(CRF)是针对语句进行标注,mat ...

  9. 【matlab】MATLAB程序调试方法和过程

    3.8  MATLAB程序的调试和优化 在MATLAB的程序调试过程中,不仅要求程序能够满足设计者的设计需求,而且还要求程序调试能够优化程序的性能,这样使得程序调试有时比程序设计更为复杂.MATLAB ...

随机推荐

  1. AFNetworking 简单应用

    最近最学习 AFNetworking ,根据自己所学对 AFNetWorking 一些简单应用做了一下简单封装,主要有 get,post形式获取 xml,json,get 方式获取图片,下载文件,上传 ...

  2. MSMQ(消息队列)

    前段时间研究WCF接触到了MSMQ,所以认真的学习了一下,下面是我的笔记. 我理解的MSMQ MSMQ可以被看成一个数据储存装置,就如同数据库,只不过数据存储的是一条一条的记录,而MSMQ存储的是一个 ...

  3. 团体程序设计天梯赛-练习集L1-012. 计算指数

    L1-012. 计算指数 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 真的没骗你,这道才是简单题 —— 对任意给定的不超过1 ...

  4. The 6th Zhejiang Provincial Collegiate Programming Contest->ProblemA:Second-price Auction

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3202 题意:拍卖东西,以第二高价的价格卖给出第一高价的人.输出最后获得东西 ...

  5. Windows下的Memcache安装与测试教程

    Windows下的Memcache安装 1.下载memcache for windows. 下载地址:http://splinedancer.com/memcached-win32/,推荐下载bina ...

  6. dijkstra,bellman-ford,floyd分析比较

    http://www.cnblogs.com/mengxm-lincf/archive/2012/02/11/2346288.html 其实我一直存在疑惑是什么导致dijkstra不能处理负权图? 今 ...

  7. Python性能鸡汤

    http://pythoner.org/wiki/257/ 毫无疑问:Python程序没有编译型语言高效快速. 甚至Python拥护者们会告诉你Python不适合这些领域. 然而,YouTube已用P ...

  8. 用printf做彩色日志记录

    写了一个简单的程序,但是考虑到有一些信息是需要打印在控制台上的,就像在windows上启动apache tomcat时控制台显示的信息一样.琢磨一会儿之后,对printf进行了封装,支持控制台打印日志 ...

  9. Google-Gson使用

    转自:http://my.oschina.net/itblog/blog/204120 这几天,因为项目的需要,接触了Google的Gson库,发现这个东西很好用,遂记下简单的笔记,供以后参考.至于G ...

  10. 【BZOJ 1185】 凸包+旋转卡壳

    Description [分析] 打计算几何真的可以哭出来... 跟那个求线段最远点差不多,这题弄三个东西转一转,一个表示左端最远点,一个表示右端最远点,一个表示上面最远点. 左右两边的最远点用点积判 ...