一、Bezier曲线

1、Bezier曲线的背景

给定n+1个数据点,p0~pn,生成一条曲线,使得该曲线与这些点描述的形状相符。
(如果要求曲线通过所有数据点,则属于插值问题;如果只要求曲线逼近这些数据点,则属于逼近问题。)

2、Bezier曲线的定义

p(t)=∑i=0naifi,n(t)p(t) = \sum_{i=0}^n a_if_{i,n}(t) p(t)=i=0∑n​ai​fi,n​(t)
基函数(无证明)
1972,Forest证明了Bezier曲线的基函数可以简化成伯恩斯坦基函数
Bi,n(t)=Cniti(1−t)n−1=n!i!(n−i)!ti(1−t)n−i.B_{i,n}(t)=C_n^i t^{i} {(1-t)}^{n-1}= \frac {n!}{i!(n-i)!}t^i (1-t)^{n-i}. Bi,n​(t)=Cni​ti(1−t)n−1=i!(n−i)!n!​ti(1−t)n−i.
∑i=0nBi,n(t)恰好是二项式t+(1−t)n的展开式\sum_{i=0}^n B_{i,n}(t)恰好是二项式{t+(1-t)}^n的展开式 i=0∑n​Bi,n​(t)恰好是二项式t+(1−t)n的展开式


从p0端到pn的末端所形成的折线称为控制多边形或贝塞尔多边形

3、Bezier曲线举例

(1)一次Bezier曲线
p(t)=∑i=0nPiBi,n(t)p(t) = \sum_{i=0}^n P_i B_{i,n}(t) p(t)=i=0∑n​Pi​Bi,n​(t)
t[0,1]

当n=1时,有两个控制点p0和p1,Bezier多项式是一次多项式:
p(t)=∑i=01PiBi,1(t)=P0B0,1(t)+P1B1,1(t)p(t) = \sum_{i=0}^1 P_i B_{i,1}(t) =P_0 B_{0,1}(t)+P_1 B_{1,1}(t) p(t)=i=0∑1​Pi​Bi,1​(t)=P0​B0,1​(t)+P1​B1,1​(t)
p(t)=(1−t)P0+tP1p(t) =(1-t)P_0+tP_1 p(t)=(1−t)P0​+tP1​
即为连接起点p0和终点p1的直线段
(2)二次Bezier曲线
p(t)=∑i=0nPiBi,n(t)p(t) = \sum_{i=0}^n P_i B_{i,n}(t) p(t)=i=0∑n​Pi​Bi,n​(t)
t[0,1]
当n=2时,有3个控制点p0、p1和p2,Bezier多项式是二次多项式:
p(t)=∑i=02PiBi,2(t)=P0B0,2(t)+P1B1,2(t)++P2B2,2(t)p(t) = \sum_{i=0}^2 P_i B_{i,2}(t) =P_0 B_{0,2}(t)+P_1 B_{1,2}(t)++P_2 B_{2,2}(t) p(t)=i=0∑2​Pi​Bi,2​(t)=P0​B0,2​(t)+P1​B1,2​(t)++P2​B2,2​(t)
p(t)=(1−t)2P0+2t(1−t)P1+t2P2p(t) =(1-t)^2P_0+2t (1-t) P_1+t^2 P_2 p(t)=(1−t)2P0​+2t(1−t)P1​+t2P2​
其矩阵形式为:
p(t)=[t2t1]∗[1−21−220100]∗[P0P1P2]p(t) = \begin{gathered} \begin{bmatrix} t^2 & t & 1\end{bmatrix} *\begin{bmatrix} 1 & -2 & 1\\ -2 & 2 & 0\\1 & 0 & 0 \end{bmatrix} *\begin{bmatrix} P_0 \\ P_1 \\ P_2\end{bmatrix} \end{gathered} p(t)=[t2​t​1​]∗⎣⎡​1−21​−220​100​⎦⎤​∗⎣⎡​P0​P1​P2​​⎦⎤​​
(3)三次Bezier曲线
当n=3时,有4个控制点p0、p1、p2和p3,Bezier多项式是三次多项式:
p(t)=∑i=03PiBi,3(t)=P0B0,3(t)+P1B1,3(t)+P2B2,3(t)+P3B3,3(t)p(t) = \sum_{i=0}^3 P_i B_{i,3}(t) =P_0 B_{0,3}(t)+P_1 B_{1,3}(t)+P_2 B_{2,3}(t)+P_3 B_{3,3}(t) p(t)=i=0∑3​Pi​Bi,3​(t)=P0​B0,3​(t)+P1​B1,3​(t)+P2​B2,3​(t)+P3​B3,3​(t)
p(t)=(1−t3)P0+3t(1−t)2P1+3t2(1−t)P2+t3P3p(t) =(1-t^3) P_0+3t (1-t)^2 P_1+3 t^2 (1-t) P_2+t^3 P_3 p(t)=(1−t3)P0​+3t(1−t)2P1​+3t2(1−t)P2​+t3P3​
每个基函数在参数t的整个(0,1)的开区间范围内不为0
其矩阵形式为:
p(t)=[t3t2t1]∗[−13−313−630−33001000]∗[P0P1P2P3]p(t) = \begin{gathered} \begin{bmatrix} t^3 & t^2 & t & 1\end{bmatrix} *\begin{bmatrix} -1 & 3 & -3 & 1\\ 3 & -6 & 3 & 0\\-3 & 3 & 0 & 0\\1 & 0 &0 & 0 \end{bmatrix} *\begin{bmatrix} P_0 \\ P_1 \\ P_2\\P_3\end{bmatrix} \end{gathered} p(t)=[t3​t2​t​1​]∗⎣⎢⎢⎡​−13−31​3−630​−3300​1000​⎦⎥⎥⎤​∗⎣⎢⎢⎡​P0​P1​P2​P3​​⎦⎥⎥⎤​​
基函数具有递推性
Bi,n(t)=(1−t)Bi,n−1(t)+tBi−1,n−1(t)B_{i,n}(t) = (1-t) B_{i,n-1}(t) +t B_{i-1,n-1}(t) Bi,n​(t)=(1−t)Bi,n−1​(t)+tBi−1,n−1​(t)

4、Bezier曲线性质

(1)端点性质
顶点p0和pn分别位于实际曲线段的起点和终点上
(2)一阶导数
基函数的一阶导数为:
Bi,n′(t)=n[Bi−1,n−1(t)−Bi,n−1(t)]B_{i,n}^{'}(t) =n[ B_{i-1,n-1}(t) - B_{i,n-1}(t) ] Bi,n′​(t)=n[Bi−1,n−1​(t)−Bi,n−1​(t)]

p′(t)=n∑i=1n(pi−pi−1)Bi−1,n−1(t)p^{'}(t) =n \sum_{i=1}^n (p_i-p_{i-1})B_{i-1,n-1}(t) p′(t)=ni=1∑n​(pi​−pi−1​)Bi−1,n−1​(t)
这说明Bezier曲线的七点和终点处的切线方向和特征多边形的第一条边及最后一条边的走向一致
(3)几何不变性
指某些几何特性不随坐标变换而变化的特性。Bezier曲线的形状仅与控制多边形各顶点的相对位置有关,而与坐标系的选择无关
(4)变差缩减性
若Bezier曲线的特征多边形是一个平面图形,则平面内任意直线与p(t)的交点个数不多于该直线与其特征多边形的交点个数,这一性质叫变差缩减性质

此性质反映了Bezier曲线比其特征多边形的波动还小,也就是说Bezier曲线比特征多边形的折线更光滑

5、Bezier曲线的生成

(1)定义法
(2)Bezier曲线的递推(de Castel jau)算法

二、B样条曲线

1、B样条曲线的背景

Bezier曲线存在的不足:
(1)一旦确定了特征多边形的顶点数(n+1)个,也就决定了曲线的阶次(n)次
(2)Bezier曲线或曲面的拼接比较复杂
(3)Bezier曲线或曲面不能作局部修改

2、B样条曲线的定义

B样条曲线的数学表达式为:
P(u)=∑i=0nPiBi,k(u)u∈[uk−1,un+1]P(u) = \sum_{i=0}^n P_i B_{i,k}(u) \\u\in[u_{k-1},u_{n+1}] P(u)=i=0∑n​Pi​Bi,k​(u)u∈[uk−1​,un+1​]
Bezier曲线:
p(t)=∑i=0nPiBi,n(t)p(t) = \sum_{i=0}^n P_i B_{i,n}(t) p(t)=i=0∑n​Pi​Bi,n​(t)
B{i,k}(u) 称为k阶(k-1)次B样条基函数,k是刻画次数的。其中k可以是2到控制点个数n+1之间的任意整数。
对Bezier曲线来说,阶数和次数是一样的;但对B样条,阶数是次数加1

P(u)=∑i=0nPiBi,k(u)P(u) = \sum_{i=0}^n P_i B_{i,k}(u) P(u)=i=0∑n​Pi​Bi,k​(u)
B样条基函数是一个称为节点矢量的非递减的参数u的序列所决定的k阶分段多项式,这个序列称为节点向量

de Boor-Cox递推定义
B样条基函数可以有各种各样的定义方式,但是公认的最容易理解的是de Boor-Cox递推定义

它的原理是,只要是k阶(k-1次)的B样条基函数,构造一种递推的公式,由0次构造1次,1次构造2次,2次构造3次,依此类推。
Bi,1(u)={1ui<u<ui+10OtherwiseB_{i,1}(u)=\left\{ \begin{array}{rcl} 1 & & {u_i<u < u_{i+1}}\\ 0 & & {Otherwise}\\ \end{array} \right. Bi,1​(u)={10​​ui​<u<ui+1​Otherwise​
Bi,k(u)=u−uiui+k−1−uiBi,k−1(u)+ui+k−uui+k−ui+1Bi+1,k−1(u)B_{i,k}(u)= \frac {u-u_i}{u_{i+k-1}-u_i} B_{i,k-1}(u) +\frac {u_{i+k}-u}{u_{i+k}-u_{i+1}} B_{i+1,k-1}(u)Bi,k​(u)=ui+k−1​−ui​u−ui​​Bi,k−1​(u)+ui+k​−ui+1​ui+k​−u​Bi+1,k−1​(u)并约定00=0\frac00=000​=0
该递推公式表明:若确定第i个k阶B样条B_{i,k}(u),需要用到ui,……ui+k,共k+1个节点,称区间[ui,u_i+k]为B_{i,k}(u)的支撑区间

3、B样条基函数定义区间及节点向量

(1)B样条曲线定义区间是什么?
(2)对于n+1个顶点,k阶的B样条曲线需要多少个节点向量(ui)与之匹配


(1)k阶B样条对应的节点向量数
Bi,1(u)={1ui<u<ui+10OtherwiseB_{i,1}(u)=\left\{ \begin{array}{rcl} 1 & & {u_i<u < u_{i+1}}\\ 0 & & {Otherwise}\\ \end{array} \right. Bi,1​(u)={10​​ui​<u<ui+1​Otherwise​
Bi,k(u)=u−uiui+k−1−uiBi,k−1(u)+ui+k−uui+k−ui+1Bi+1,k−1(u)B_{i,k}(u)= \frac {u-u_i}{u_{i+k-1}-u_i} B_{i,k-1}(u) +\frac {u_{i+k}-u}{u_{i+k}-u_{i+1}} B_{i+1,k-1}(u)Bi,k​(u)=ui+k−1​−ui​u−ui​​Bi,k−1​(u)+ui+k​−ui+1​ui+k​−u​Bi+1,k−1​(u)
对于B_{i,1}(1阶0次基函数)来说,涉及ui到u_{i+1}一个区间,及一阶的多项式涉及一个区间两个节点
B_{i,2}是由B_{i,1}和B_{i+1,1}组成,因此B_{i,2}涉及2个区间3个节点;B_{i,3}设计3个区间4个节点……B_{i,k}涉及k个区间k+1个节点
(2)B样条函数定义区间
P(u)=∑i=0nPiBi,k(u)u∈[uk−1,un+1]P(u) = \sum_{i=0}^n P_i B_{i,k}(u) \\u\in[u_{k-1},u_{n+1}] P(u)=i=0∑n​Pi​Bi,k​(u)u∈[uk−1​,un+1​]
例子:

4、B样条基函数的主要性质

(1)局部支撑性
(2)权性
(3)连续性
(4)分段参数多项式

5、B样条函数的主要性质

(1)、局部性:
k阶B样条曲线上的一点至多与k个控制顶点有关,与其他控制顶点无关
移动曲线的第i个控制顶点pi,至多影响到定义在区间上那部分曲线的形状,对曲线其余部分不发生影响
(2)、变差缩减性(同Beizer)
(3)、几何不变性
(4)、凸包性:

6、B样条曲线类型的划分

(1)、均匀B样条曲线(uniform B-spline curve)
当节点沿参数轴均匀等距分布,即u_{i+1}-ui=常熟>0时,表示均匀B样条函数
{0,1,2,3,4,5,6}
均匀B样条的基函数呈周期性。即给定n和k,所有基函数有相同形状。每个后续基函数仅仅是前面基函数在新位置上的重复

(2)准均匀B样条曲线(Quai-uniform B-spline curve)
与均匀B样条曲线的差别在于两端节点具有重复度k,这样的节点矢量定义了准均匀的B样条基
均匀:u=(0,1,2,3,4,5,6)
准均匀:u=(0,0,0,1,2,3,4,5,5,5)

(3)、分段Bezier曲线
(4)非均匀B样条曲线

轨迹规划——Bezier曲线与B样条曲线相关推荐

  1. 轨迹规划-贝塞尔曲线

    1. 简介 贝塞尔曲线于 1962 年,由法国工程师皮埃尔·贝济埃(Pierre Bézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计,贝塞尔曲线最初由保尔·德·卡斯特里奥于1959年运用 ...

  2. 自动驾驶路径轨迹规划(三阶曲线spline)

    对于给定的一连串waypoints我们需要对其进行平滑线处理,这里介绍一种三阶spline的平滑方法: call function: clc clear all% x = [-4 -2 0 2 4 6 ...

  3. 【四足机器人--摆动相足端位置速度轨迹规划】(4.1)FootSwingTrajectory(bezier曲线计算脚的摆动轨迹)代码解析

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 一.FootSwingTrajectory(bezier曲线)的内容 ...

  4. 3次Bezier曲线,曲面和3次B样条曲线和曲面

    问题: 昨天刚忙完图形学的编程作业,题目是自拟,听老师说他要重点考这个自由曲线,曲面,特地把作业定位了这个,好熟悉熟悉,据说成程老师的课考试非常的难呀.郁闷. 解答: 先自由曲线的含义和概念.基本上我 ...

  5. 开源项目推荐:Bezier曲线、B-Spline和NURBS的区别与《THE NURBS BOOK 2nd》简介,曲线拟合可视化工具

    一.基本概念 B-Spline:B样条曲线 NURBS(Non Uniform Rational B-Spline):非均匀有理B样条曲线 B样条曲线有三种类型: 当起始点和终止点的重复度为最高次数加 ...

  6. 六轴机械臂-正解+逆解+轨迹规划实现

    之前,写了一篇博客,从坐标系的说明 -> D-H参数表的建立 -> 正解和逆解的整个算法推导过程整理了一篇博客https://blog.csdn.net/ymj7150697/articl ...

  7. bezier曲线解析与代码(c++)

    前言: 作为rhino重度用户,我对于nurbs建模早有耳闻,但对于何为nurbs却不得其解.最近借上<计算机辅助设计>课程的机会,对此作了一些深入的学习,于是在此记录一下一些课程笔记和课 ...

  8. Bezier(贝塞尔)曲线(五阶)的轨迹规划在自动驾驶中的应用(五)

    提供动态轨迹的Bezier轨迹,计算cost minimization 后取cost最小值 clcclear allp0 = [ 0, 0]; % p1 = [7.5,7.5*4/30]; % p2= ...

  9. Bezier(贝塞尔)曲线的轨迹规划在自动驾驶中的应用(一)

    本文主要根据Path Generation and Tracking Based on a Bézier Curve for a Steering Rate Controller of Autonom ...

最新文章

  1. Android源码下载总结
  2. java 共享内存获取写权限_跨进程访问共享内存的权限问题
  3. 【环境搭建000】详细图解ubuntu 上安装配置eclips
  4. python 列表有没有顺序_python的list有顺序吗
  5. Linux虚拟机设置Samba服务
  6. 台达服务器电源原理电路图,台达DPS-250GB-4B ATX电源原理分析与检修
  7. 2019暑期金华集训 Day7 分治
  8. 解决Win2016提示“发生身份验证错误 要求的函数不受支持”的问题
  9. 使用SQLyog导入EXCEL数据和合并数据表
  10. eDP接口信号组成认识
  11. CString - 详解
  12. java interface和类的 extends与implement 的简单总结
  13. ESP8266_02程序的编译与下载
  14. Java注解案例-简单测试框架
  15. python语言的变量特点随时_完美契合人类习惯的Python变量和基本数据类型
  16. 勿忘初心,保持饥渴的心态
  17. MATLAB转C语言的步骤与解决方案
  18. COST 231 Hata 模型 自学笔记
  19. crazyflie2.0使用北通游戏手柄控制thrust,roll,pitch和yaw
  20. CMake中target_compile_definitions的使用

热门文章

  1. 手机编程,调用GPS定位模块
  2. 老照片修复项目:MyHeritage软件 破姐版分享
  3. 光立方PCB绘画时出现的问题
  4. 脚本守护的方式实现了android应用程序的守护,仙境传说RO守护永恒的爱
  5. 写给不会爱自己的人,我自己
  6. 《你不可不知的人性》刘墉 读书笔记(一)
  7. linux学习相对路径与绝对路径
  8. java情人节_程序员也是有情怀的!情人节看程序员如何告白
  9. LeetCode题解——T155(最小栈)
  10. 淘宝开放平台阿里奇门对接联调教程详细操作