系列文章目录
前言
spline样条曲线就是画线的尺子,是线条生成器,是固定规则的线条生成
一、课程知识
Bezier curves
首先是线性插值,不停的进行插值最后得到的函数P(t),t即为插值的比例从0到1,这样做当然简单,但是带来的问题是:计算很昂贵
为此,它还有另一种形式
将P看作是四个向量P1,P2,P3,P4的线性组合
还有一种形式:
将向量线性组合后由t次幂来加权
还有一种将后两种表示形式结合的矩阵表示方法:
中间是它的特征矩阵,前两个相乘是第二种表示形式,后两种相乘是第三种表示形式
这就是三次贝塞尔曲线,所以还有如下十二次贝塞尔曲线:
它有什么坏处呢?
1.改变一个控制点则全局变化
2.自定义形状很困难,无法保证通过每一个点(其实是相较于三次贝塞尔曲线的缺点)
3.计算量非常大,尤其是不断变化的时候
所以,我们采用三次贝塞尔进行拼接:
三个问题迎刃而解,首先因为它是贝塞尔曲线组成的贝塞尔样条,那么它一定通过贝塞尔曲线的起始点,所以它通过每一点,形状更容易控制。二是,它是由贝塞尔曲线组成的,所以它的控制点只能改变它涉及的贝塞尔曲线。三是,它是由贝塞尔曲线简单拼接起来i,所以计算开销只是叠加不会很大。
参数连续和几何连续
那么我们进一步研究这个曲线。
作为曲线的尺子,我们不仅需要它能随我们心意进行制作曲线,而且还要它能满足我们希望的条件。作为尺子画直线我们希望它直且长度精确。对于画曲线,我们在意的就是它的连续性。
在这里提前定义,参数连续性就是各阶导数连续,几何连续是各阶导方向连续。即差别一个导数的大小是否相同。这里我的理解比较困难,因为没有考虑维度,一维f(x)函数来说,一阶导数即代表斜率,也代表方向,导数的大小和方向直接界限到底在哪?对于二维函数tP(P是一个向量),导数则既有方向又有大小,大小代表曲率方向代表切线方向。只能理解到这一步,望各位不吝赐教。
对于贝塞尔样条,它的连续性是怎样呢?
抛结论后思考:中间控制点两边的控制点镜像则C1参数一阶连续,若镜像方向相同则G1几何连续。
求导即可推出。
G2的意义
G1切线连续,G2曲率连续(曲线速度不为0)
Hermit spline
就是自己给起始点的位置速度,根据约束求贝塞尔曲线然后拼接,这样的中间控制点既是前一段的尾点也是后一段的头点,速度一样,则为C1连续。本质上是中间控制点镜像的贝塞尔曲线
就是不人为给定速度,输入直接就是控制点的位置即可。速度由自己生成。生成规则,节点2的速度为1指向3的,3为2指向4的,以此类推。这样除了1节点和最后一个节点都有了自己的速度。
Catmul-rom spline
1点和最后点的速度由附近点镜像生成
所以,1的速度为1指向2的速度两倍。
也是同上一个样条为C1连续
B spline
根据四个p1,p2,p3,p4的位置满足C2约束所生成的曲线就是B曲线,由其组成的样条就是B样条
特征矩阵16个未知数,需要16个约束,前15个好理解。第16个为保证凸函数B1,2,3为1.
它的拼接前后有三个控制点相同,所以可以达到C2.
二、fast planner中的样条后端优化
未完待续。。。
参考:
1.www.youtube.com/watch?v=jvPPXbo87ds