ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

matlab练习程序(均匀B样条)

2020-01-24 17:55:06  阅读:315  来源: 互联网

标签:end 样条 练习 b0 matlab b2 b3 b1


B样条是对贝塞尔曲线的一种扩展,包含两个贝塞尔曲线不具有的优点:

1. B样条的多项式次数可以独立于控制点数目,而贝塞尔曲线次数和控制点是紧密相关的。

2. B样条允许局部控制曲线或曲面生成。

B样条曲线生成的关键是构造出基函数,下面提供了二次、三次和四次三种基函数来进行B样条曲线生成。

matlab代码如下:

clear all;
close all;
clc;

p =ginput();    %至少点五个点,因为下面有四次样条
plot(p(:,1),p(:,2),'k-o');  

%二次均匀b样条
re2=[];
for i=1:length(p)-2  
    for t=0:0.01:1   
        
        b0 = 1/2*(1-t)^2;
        b1 = 1/2*(-2*t^2+2*t+1);
        b2 = 1/2*t^2;
        
        x=b0*p(i,1)+b1*p(i+1,1)+b2*p(i+2,1);
        y=b0*p(i,2)+b1*p(i+1,2)+b2*p(i+2,2);        
        
        re2=[re2;x y];
    end
end

%三次均匀b样条
re3=[];
for i=1:length(p)-3  
    for t=0:0.01:1   
  
        b0=1/6*(1-t)^3;                       
        b1=1/6*(3.*t^3-6*t^2+4);        
        b2=1/6*(-3*t^3+3*t^2+3*t+1);     
        b3=1/6*t^3;                     
  
        x=b0*p(i,1)+b1*p(i+1,1)+b2*p(i+2,1)+b3*p(i+3,1);    
        y=b0*p(i,2)+b1*p(i+1,2)+b2*p(i+2,2)+b3*p(i+3,2);     

        re3=[re3;x y];
    end
end

%四次均匀b样条
re4=[];
for i=1:length(p)-4  
    for t=0:0.01:1   
  
        b0=1/24*(t^4-4*t^3+6*t^2-4*t+1);                     
        b1=1/24*(-4*t^4+12*t^3-6*t^2-12*t+11);      
        b2=1/24*(6*t^4-12*t^3-6*t^2+12*t+11);    
        b3=1/24*(-4*t^4+4*t^3+6*t^2+4*t+1);                     
        b4=1/24*t^4;
        
        x=b0*p(i,1)+b1*p(i+1,1)+b2*p(i+2,1)+b3*p(i+3,1)+b4*p(i+4,1);    
        y=b0*p(i,2)+b1*p(i+1,2)+b2*p(i+2,2)+b3*p(i+3,2)+b4*p(i+4,2);     

        re4=[re4;x y];
    end
end

hold on;  
plot(re2(:,1),re2(:,2),'r');
plot(re3(:,1),re3(:,2),'g');
plot(re4(:,1),re4(:,2),'b');

结果如下:

 

其中黑色为控制点,红色为二次样条,绿色为三次样条,蓝色为四次样条。

标签:end,样条,练习,b0,matlab,b2,b3,b1
来源: https://www.cnblogs.com/tiandsp/p/12232392.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有