最详细的Catmull-Rom Spline 推导与应用
附赠最强自动驾驶学习资料:直达链接
前言
我们往Spline 的方向深入,探究 Catmull-Rom 的曲线,想必研究的越深入,来到这里的人也越少。实际上,作为一个使用引擎的编程者,并不需要推导的那么深入,引擎自然有现成的实现。不过,既然已经钻研到了这里,“予之力尚足以入,火尚足以明也”如果不在此研究明白,恐怕以后也很难有机会再回到这里来研究更多吧。
当然,我们到了这里,会发现,这部分的中文的教材充斥着抽象的概念,晦涩难懂;这部分的博客往往伴有“无脑转译”和“不求甚解” 的存在。甚至能在一些他人的博文中发现隐蔽的错误,会困扰你对这部分知识的理解,这也是我本人亲自踩过的坑。所以,如果有能力,应阅读更多第一手的英文资料。
在参照各个讲义和教程(见最后的附录)后,我小心翼翼的推导每一个公式的每一个的步骤,只望能给每个认真想要知道原理与过程的人一个更能接近全面的答复。
加V好友:AutoDriverZone,获取史上最强的自动驾驶学习资料
1、Catmull-Rom Spline 简介
2、公式推导
这是个一般公式,我们是从二维中推导出来的,我们也可以运用在三维或者更高维度中,只要带入高维的坐标点即可。
3、理解 Spline
感性上,如何去理解它呢?我们一路是从最简单的贝塞尔曲线开始的,从最简单的插值开始,找到两个点的线上的任意一点,是这两个点进行线性插值来得到的,找到一个二阶贝塞尔曲线,曲线是这三个点的两条线的插值点连线线性插值出来…直到现在在叙述的 Catmull-Rom Spline,其实我们也可以将其理解为某种非线性的插值。
如图所示,这四个函数就代表了四个点在 0-1之间的插值比例,或者我们可以理解为,这是一个三次式插值, 我们通过在 0⩽t⩽1 之前带入各个点的 x值,然后通过这四个三次项的式子来整理成一个关于 t 的三次多项式,这就是我们要求的Spline了。
它和Bézie曲线的关系呢?Catmull-Rom曲线和Bézier曲线之间的主要区别在于“点的含义”: 三次Bézier曲线由