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


    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');

    结果如下:

     

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

  • 相关阅读:
    Es索引优化
    Echarts-JAVA
    黑客容易攻击的端口
    基于流数据挖掘的网络流量异常检测及分析研究
    大数据可视化分析-绿盟
    Cron
    spring mvc 使用及json 日期转换解决方案
    PIXLCLOUND
    Moloch
    MySQL JDBC的setFetchSize
  • 原文地址:https://www.cnblogs.com/tiandsp/p/12232392.html
Copyright © 2020-2023  润新知