贝塞尔曲线简介

        贝塞尔曲线由起点P0终点Pn控制点Pi组成,曲线上点为B点,由当前控制点到下一控制点的线段比例t确定,t∈[0,1] 。

        假设B(x,y),P0(x0,y0),P1(x1,y1),P2(x2,y2),P3(x3,y3)。

        常用的是三阶贝塞尔曲线,常用在无人驾驶车辆的泊车轨迹生成中。

一、三阶贝塞尔曲线   

一阶贝塞尔曲线只有起点P0和终点P1,B点为按照比例t逐渐由P0到P1,此时贝塞尔曲线即为一条直线,与线段P0P1重合:

   二阶贝塞尔曲线Q1与Q2仍然是按照比例t选取的点,B点是Q1Q2上比例为t的点,因此有:

  三阶贝塞尔曲线的比例计算同理,沿用二阶贝塞尔曲线的轨迹点方程: 

        贝塞尔曲线使用比例t得出散列点的坐标,贝塞尔曲线与起点和终点处的线段是相切的(画的不标准)。可以看到上式中,控制点的系数满足二项式的展开。 因此贝塞尔曲线还有其他表示方式如下,其中i∈[0,n]。

二、使用MATLAB绘制bezier曲线

如下是一个MATLAB脚本文件,可绘制贝塞尔曲线。控制点可自行设定。

clc;
clear;
close;
%% 选取控制点
control_point = [0,0;
                 4,6;
                 6,2;
                 12,3;
                 15,5;
                 22,9;
                 27,2;
                 33,6;
                 38,3];
%% 迭代求解
index = 1;
for p = 0:0.01:1
    ctrl_pnt = control_point;
    [row,col] = size(ctrl_pnt);
    while(row > 1)
        for j = 1:row-1
            ctrl_pnt(j,1) = (1-p)*ctrl_pnt(j,1) + p*ctrl_pnt(j+1,1);
            ctrl_pnt(j,2) = (1-p)*ctrl_pnt(j,2) + p*ctrl_pnt(j+1,2);
        end
        row = row - 1;
    end
    bezier_points(index,:) = ctrl_pnt(1,:);
    index = index + 1;
end
%% 绘制曲线
plot(bezier_points(:,1),bezier_points(:,2),'b-','LineWidth',2);
hold on 
plot(control_point(:,1),control_point(:,2),'ro','LineStyle','--');

三、贝赛尔曲线的不足

        Bezier曲线曲面有很多优点,可以用鼠标拖动控制顶点,改变曲线的形状,非常直观,给设计人员很大的自由度。但Bezier曲线有几点不足:

(1)一旦确定了控制点数(n+1个),则曲线阶次确定(n次),当顶点数过多时,Bezier的阶次很高。且高次Bezier的导数会有很多零点,造成曲线出现过多极值点,表现为曲线的震荡。

(2)为了克服这一现象,可以采用分段Bezier曲线拼接的方式。但Bezier曲线或曲面的拼接又比较复杂。因为拼接过程需要满足拼接点的0阶、1阶甚至更高阶连续性,条件比较复杂苛刻。

(3)Bezier曲线或曲面无法进行局部修改,因为伯恩斯坦基函数的在整个区间都有值,即整个曲线的区间都是伯恩斯坦基函数的支撑区间。

参考链接:

(1)https://www.cnblogs.com/fangsmile/articles/11642607.html

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值