【三次B样条插值教程】
3次B样条插值教程
- B样条插值
- 数学表达
- 曲线插值
- 三次clamped B-spline插值节点分析
- 三次clamped B-spline展开
- 节点与型值点对应
- 实现效果
B样条插值
数学表达
曲线插值
在进行曲线插值时,将两端的插值点作为曲线的型值点是插值的必要条件,那在B样条插值时刚好有一种clamped B-spline满足这个条件,特点是节点首末的0,1重复K+1次。
三次clamped B-spline插值节点分析
对于三次 clamped B-spline来说,结合上述公式
-
样条次数K
K=3 -
型值点n+1个,节点m+1个满足如下关系式
m=n+k+1 -
对于三次B样条,首末节点重复3+1次,节点t0,t1,…,tm满足
另外对于节点矢量特殊说明的是有几种选择和使用方式,效果不同根据实际情况测试使用: -
等间距法
对于clamped-B spline来说,等间距的节点矢量如下 -
弦长法
对于clamped-B spline来说,弦长法的节点矢量分配类似等间距法 -
向心法
对于clamped-B spline来说,向心法的节点矢量分配类似等间距法
以下借用几张图来看几种节点矢量方法的使用对比,各有千秋,看具体情况
图中 黑色是等间距节点,红色是向心法节点,蓝色是弦长法节点,看起来貌似向心法得出的样条曲线更好,其实不然,请看下图:
在该情况下,可以看出黑色的等间距法效果最好,因此我们说要看具体情况,并不存在那种方法绝对最优,因势而变
三次clamped B-spline展开
由于该样条函数是一个分段函数,较为复杂,使用该函数进行插值前我们需要研究该函数的展开形式,在此借用一张经典展开图,有助于展开理解
这里最好大家自己手动将3次样条函数公式展开一次,加深理解,有些繁杂,谈不上难度,动起笔来
根据3次样条最终展开公式可知,对于节点tj来说,基函数只有四个非零,如下:
因此3次B样条的区间表达式B(tj)=
根据节点矢量的不同区间就确定了不同区间的关于t的三次函数,由这些分段函数共同构成了样条曲线。
节点与型值点对应
在生成样条曲线时,需要考虑节点与型值点的对应关系,如下图所示:
上图中的节点与型值点是最简单直接的一一对应关系,对于clamped-B spline来说有如下对应关系:
去除两端的重复度K后,对应关系如下:
z为型值点,即为曲线上的点,也即:
根据对应关系可知,l-0=n+1-3,即n=l+2
也即设定样条的控制点数目比型值点数目多两个,
n=l+2
样条曲线的节点数目满足如下公式:
m=n+k+1=l+2+k+1=l+6
也即需要设定的节点数目比型值点多6个
根据上述展开的3次B样条的区间表达式B(tj)可知:
对于zl如下:
根据系数计算和相关约束取:
从上述矩阵方程中我们可以看出,总共有l+1个方程,对于插值来说,已知型值点和系数矩阵,反求控制点,而控制点却有l+3个,属于欠定方程,所以现在还需要加两个约束条件来使得方程数量和未知数一样。
在此采用如下约束:
采用一种常用的非扭节边界条件,也即第一个点(对于clamped,t3)与第二个点(对于clamped,t4)的三阶导数相等;倒数第二个点(对于clamped,tn)与倒数第三个点(对于clamped,tn-1)的三阶导数相等
也即:
将以上两个条件加入到矩阵中得到: