三次、四次和五次B样条轨迹规划

仅以此记录一下花了一点时间找的五次B样条规划的计算公式

1、三次计算公式

F:-(t - 1)^3/6
F:t^3/2 - t^2 + 2/3
F:(t + 1)^3/6 - (2*t^3)/3
F:t^3/6


2、四次计算公式
F:(t - 1)^4/24
F:t^3/2 - t^2/4 - t/2 - t^4/6 + 11/24
F:(t + 2)^4/24 - (5*(t + 1)^4)/24 + (5t^4)/12
F:(t + 1)^4/24 - (5
t^4)/24
F:t^4/24

3、五次计算公式
F(0):-(t - 1)^5/120
F(1):t^2/6 - (5*t)/12 + t^3/6 - t^4/6 + t^5/24 + 13/60
F(2):t^4/4 - t^2/2 - t^5/12 + 11/20
F(3):(t + 2)^5/120 - (t + 1)^5/20 + t^5/8
F(4):(t + 1)^5/120 - t^5/20
F(5):t^5/120

此部分代码参考:https://www.cnblogs.com/tiandsp/p/12232392.html

clear all;
close all;
clc;

p =ginput();    %至少点五个点,因为下面有四次样条(鼠标在figure上点,最后点完之后按enter显示刚刚的点)
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');

在这里插入图片描述

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值