轨迹规划——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)


相关推荐

  • 前端技术框架选型_常用的web开发框架

    前端技术框架选型_常用的web开发框架前端开发框架选型清单

  • 了解DeepFakes背后的技术

    了解DeepFakes背后的技术1.神经网络和自动编码器简介神经网络概论在计算机科学中,人工神经网络由成千上万个以特定方式连接的节点组成。节点通常分层排列;它们的连接方式决定了网络的类型,最终决定了网络在另一网络上执行特定计算任务的能力。传统的神经网络可能看起来像这样:输入层中的每个节点(或人工神经元)都包含一个数值,该数值对我们要馈送到网络的输入进行编码。如果我们要预测明天的天气,则输入节点可能包含以范围内的数字编码的压力,温度,湿度和风速\left[-1,+1\right]。这些值被广播到下一层。有趣的是,每个边缘

  • zookeeper分布式锁实现原理(分布式锁怎么实现)

       摘要:本文要使用Zookeeper来实现一个分布式锁,是一个悲观锁。  本文源码请在这里下载:https://github.com/appleappleapple/DistributeLearning一、锁设计  获取锁实现思路:1.首先创建一个作为锁目录(znode),通常用它来描述锁定的实体,称为:/lock_node2.希望获得锁的客户端在锁目录下创建zno…

  • 【SpringBoot】46、SpringBoot中整合JWT实现Token验证(拦截器篇)

    【SpringBoot】46、SpringBoot中整合JWT实现Token验证(拦截器篇)前言上篇文章我们已经实现了使用自定义注解验证token信息,这样我们就会发现,当我们需要验证的接口较多时,我们需要每个方法上面都加上@JwtToken这个注解,也是非常麻烦,本片文章,我们继续使用拦截器来实现token信息的验证如果对整合JWT还不熟悉的朋友,可以先看看我的这篇博客:【SpringBoot】四十四、SpringBoot中整合JWT实现Token验证(整合篇)如果对自定义注解验证token信息感兴趣的朋友,可以看看我的这篇博客:【SpringBoot】四十五、Spr

  • 滴滴新算法让你应对女友?道翰天琼认知智能机器人平台API接口大脑为您揭秘-64

    滴滴新算法让你应对女友?道翰天琼认知智能机器人平台API接口大脑为您揭秘-64某个周末晚上,小陈约好了和女朋友去商场吃饭看电影。小陈平时喜爱打游戏,此时正在专心打农药。“啊!ZZ队友送人头,白瞎我最强亚索!伤心~”而小陈的女朋友这个时候打来了电话:你收拾好了吗?我已经到口红啦……小陈内心:“这次竟然这么快?我还以为刚到眉毛呢,可是我还想再开一局逆风翻盘拿五杀呢!但是又不能迟到啊……小陈想到先点开打车软件计算一下双方的时间吧:首先设置好出发地为女朋友家,目的地为要去的商场,呼叫快车,显示要30分钟。再来设置一下自己的出发地,呼叫快车,哇!只要15分钟。小陈于是决定…

  • EnableEventValidation 是什麽東東?

    EnableEventValidation 是什麽東東?
    回发或回调参数无效。在配置中使用或在页面中使用<%@PageEnableEventValidation="true"%>启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用ClientScriptManager.RegisterForEventValidation方法来注册回发或回调数据以进行验证。
    说明:执行

发表回复

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

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