轨迹规划——Bezier曲线与B样条曲线

轨迹规划——Bezier曲线与B样条曲线一、Bezier曲线1、Bezier曲线的背景给定n+1个数据点,p0~pn,生成一条曲线,使得该曲线与这些点描述的形状相符。(如果要求曲线通过所有数据点,则属于插值问题;如果只要求曲线逼近这些数据点,则属于逼近问题。)2、Bezier曲线的定义p(t)=∑i=0naifi,n(t)p(t)=\sum_{i=0}^na_if_{i,n}(t)p(t)=i=0∑n​ai​fi,n…

大家好,又见面了,我是你们的朋友全栈君。

一、Bezier曲线

1、Bezier曲线的背景

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

2、Bezier曲线的定义

p ( t ) = ∑ i = 0 n a i f i , n ( t ) p(t) = \sum_{i=0}^n a_if_{i,n}(t) p(t)=i=0naifi,n(t)
基函数(无证明)在这里插入图片描述
1972,Forest证明了Bezier曲线的基函数可以简化成伯恩斯坦基函数
B i , n ( t ) = C n i t i ( 1 − t ) n − 1 = n ! i ! ( n − i ) ! t i ( 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)=Cniti(1t)n1=i!(ni)!n!ti(1t)ni.
∑ i = 0 n B i , n ( t ) 恰 好 是 二 项 式 t + ( 1 − t ) n 的 展 开 式 \sum_{i=0}^n B_{i,n}(t)恰好是二项式{t+(1-t)}^n的展开式 i=0nBi,n(t)t+(1t)n

在这里插入图片描述
从p0端到pn的末端所形成的折线称为控制多边形或贝塞尔多边形

3、Bezier曲线举例

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

当n=1时,有两个控制点p0和p1,Bezier多项式是一次多项式:
p ( t ) = ∑ i = 0 1 P i B i , 1 ( t ) = P 0 B 0 , 1 ( t ) + P 1 B 1 , 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=01PiBi,1(t)=P0B0,1(t)+P1B1,1(t)
p ( t ) = ( 1 − t ) P 0 + t P 1 p(t) =(1-t)P_0+tP_1 p(t)=(1t)P0+tP1
即为连接起点p0和终点p1的直线段
(2)二次Bezier曲线
p ( t ) = ∑ i = 0 n P i B i , n ( t ) p(t) = \sum_{i=0}^n P_i B_{i,n}(t) p(t)=i=0nPiBi,n(t)
t[0,1]
当n=2时,有3个控制点p0、p1和p2,Bezier多项式是二次多项式:
p ( t ) = ∑ 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) = \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=02PiBi,2(t)=P0B0,2(t)+P1B1,2(t)++P2B2,2(t)
p ( t ) = ( 1 − t ) 2 P 0 + 2 t ( 1 − t ) P 1 + t 2 P 2 p(t) =(1-t)^2P_0+2t (1-t) P_1+t^2 P_2 p(t)=(1t)2P0+2t(1t)P1+t2P2
其矩阵形式为:
p ( t ) = [ t 2 t 1 ] ∗ [ 1 − 2 1 − 2 2 0 1 0 0 ] ∗ [ P 0 P 1 P 2 ] 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)=[t2t1]121220100P0P1P2
(3)三次Bezier曲线
当n=3时,有4个控制点p0、p1、p2和p3,Bezier多项式是三次多项式:
p ( t ) = ∑ 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) = \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=03PiBi,3(t)=P0B0,3(t)+P1B1,3(t)+P2B2,3(t)+P3B3,3(t)
p ( t ) = ( 1 − t 3 ) P 0 + 3 t ( 1 − t ) 2 P 1 + 3 t 2 ( 1 − t ) P 2 + t 3 P 3 p(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)=(1t3)P0+3t(1t)2P1+3t2(1t)P2+t3P3
每个基函数在参数t的整个(0,1)的开区间范围内不为0
其矩阵形式为:
p ( t ) = [ t 3 t 2 t 1 ] ∗ [ − 1 3 − 3 1 3 − 6 3 0 − 3 3 0 0 1 0 0 0 ] ∗ [ P 0 P 1 P 2 P 3 ] 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)=[t3t2t1]1331363033001000P0P1P2P3
基函数具有递推性
B i , n ( t ) = ( 1 − t ) B i , n − 1 ( t ) + t B i − 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)=(1t)Bi,n1(t)+tBi1,n1(t)

4、Bezier曲线性质

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

p ′ ( t ) = n ∑ i = 1 n ( p i − p i − 1 ) B i − 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=1n(pipi1)Bi1,n1(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 = 0 n P i B i , k ( u ) u ∈ [ u k − 1 , u n + 1 ] P(u) = \sum_{i=0}^n P_i B_{i,k}(u) \\u\in[u_{k-1},u_{n+1}] P(u)=i=0nPiBi,k(u)u[uk1,un+1]
Bezier曲线:
p ( t ) = ∑ i = 0 n P i B i , n ( t ) p(t) = \sum_{i=0}^n P_i B_{i,n}(t) p(t)=i=0nPiBi,n(t)
B{i,k}(u) 称为k阶(k-1)次B样条基函数,k是刻画次数的。其中k可以是2到控制点个数n+1之间的任意整数。
对Bezier曲线来说,阶数和次数是一样的;但对B样条,阶数是次数加1

P ( u ) = ∑ i = 0 n P i B i , k ( u ) P(u) = \sum_{i=0}^n P_i B_{i,k}(u) P(u)=i=0nPiBi,k(u)
B样条基函数是一个称为节点矢量的非递减的参数u的序列所决定的k阶分段多项式,这个序列称为节点向量
在这里插入图片描述
de Boor-Cox递推定义
B样条基函数可以有各种各样的定义方式,但是公认的最容易理解的是de Boor-Cox递推定义

它的原理是,只要是k阶(k-1次)的B样条基函数,构造一种递推的公式,由0次构造1次,1次构造2次,2次构造3次,依此类推。
B i , 1 ( u ) = { 1 u i < u < u i + 1 0 O t h e r w i s e B_{i,1}(u)=\left\{ \begin{array}{rcl} 1 & & {u_i<u < u_{i+1}}\\ 0 & & {Otherwise}\\ \end{array} \right. Bi,1(u)={
10ui<u<ui+1Otherwise

B i , k ( u ) = u − u i u i + k − 1 − u i B i , k − 1 ( u ) + u i + k − u u i + k − u i + 1 B i + 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+k1uiuuiBi,k1(u)+ui+kui+1ui+kuBi+1,k1(u)并约定 0 0 = 0 \frac00=0 00=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样条对应的节点向量数
B i , 1 ( u ) = { 1 u i < u < u i + 1 0 O t h e r w i s e B_{i,1}(u)=\left\{ \begin{array}{rcl} 1 & & {u_i<u < u_{i+1}}\\ 0 & & {Otherwise}\\ \end{array} \right. Bi,1(u)={
10ui<u<ui+1Otherwise

B i , k ( u ) = u − u i u i + k − 1 − u i B i , k − 1 ( u ) + u i + k − u u i + k − u i + 1 B i + 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+k1uiuuiBi,k1(u)+ui+kui+1ui+kuBi+1,k1(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 = 0 n P i B i , k ( u ) u ∈ [ u k − 1 , u n + 1 ] P(u) = \sum_{i=0}^n P_i B_{i,k}(u) \\u\in[u_{k-1},u_{n+1}] P(u)=i=0nPiBi,k(u)u[uk1,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样条曲线

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/151260.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • uni-app uni.uploadFile上传图片前后端(java)详解

    uni-app uni.uploadFile上传图片前后端(java)详解近日在使用uni.uploadFile上传图片时,碰到后端收到不到文件的问题,网上没有写uni-appjava后端的处理实例,小程序到是有很多,但都是单文件上传,即使是多文件上传,也是采用一个for循环多次调用uploadFile函数,对文件一个一个提交。伪代码如下://微信小程序为例:for(vari=0;i<filePaths.length;i++){…

  • mysql函数索引_MySQL 函数索引 (Functional indexes)

    mysql函数索引_MySQL 函数索引 (Functional indexes)函数索引示例:CREATETABLEt1(col1INT,col2INT,INDEXfunc_index((ABS(col1))));CREATEINDEXidx1ONt1((col1+col2));CREATEINDEXidx2ONt1((col1+col2),(col1-col2),col1);ALTERTABLEt1ADDINDE…

  • 工程师必备APP抓包技能

    工程师必备APP抓包技能奇技·指南一台上网电脑就能完成APP抓包分析一条龙服务。这是一篇APP抓包分析总结性文章,采用APP模拟器与Web调试代理工具组合玩法。从此APP抓包分析能力变得…

  • gitlab cicd配置

    gitlab cicd配置简介以前代码更新之后,我们需要手动将代码拉到测试服务器上,运行验收通过之后,再在生产环境重新弄一遍,一两个服务还算轻松,如果涉及到的服务很多的话,每一个服务都需要这样来几遍,这是一个很头疼了,为了解决这个问题,我们引入了比较简单易懂的自动化部署工具,这也是gitlab自带的CI工具gitlab-runner,该工具解决了多环境多服务手动部署繁琐问题,用自动化脚本代替人工部署,我们不需要手…

  • python问题 Traceback (most recent call last)

    python问题 Traceback (most recent call last)python运行问题Traceback(mostrecentcalllast)出现报错traceback(mostrecentcalllast)…………importError:Nomodulenamedlxml解决方案一般是打开cmd执行命令pipinstallxxxx(缺失的包,例如lxml)当然也有例外的,具体可参考下面的问题及其解决…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号