三次样条插值

来源:互联网 发布:js编程规范 编辑:程序博客网 时间:2024/04/29 20:35

三次插值样条曲线在灵活性和计算速度之间进行了合理的折中。与更高次样条相比,三次插值样条只需较少的计算和存储,且较稳定。与二次插值样条相比,三次插值样条在模拟任意形状时显得更灵活。

三次插值样条曲线由分段的三次多项式来描述。设其参变量为t,则分段三次插值样条曲线表达式的一般形式为:

             P(t) = B1 + B2t + B3t2 + B4t3     (0≤t≤tm)           (4-13)

其中,P(ti) = [x(ti)  y(ti)  z(ti)]可以看作三次插值样条曲线上某一点的位置向量,ti是该点的参变量,x(ti)、y(ti)、z(ti)可以看作是该点的坐标值。

式(4-13)中的B1、B2、B3、B4为四个待定系数。必须确定这四个系数,这需要设定四个独立条件。


n+1个型值点产生n 段曲线,每段曲线都需要确定四个系数。确定系数的不同方法导致不同的三次插值样条曲线:

三次自然样条曲线
Hermite样条曲线
Cardinal样条曲线


三次自然样条曲线 

三次自然样条曲线是最早用于图形应用的三次插值样条曲线。

 三次自然样条曲线具有C2连续性。

  n+1个型值点(P0、P1、P2……Pn)插值产生n段曲线,每段曲线有4个系数,共有4n个多项式系数需要确定。


4n个多项式系数的确定:
①  对于每个内型值点(P1、P2……Pn-1,共n-1个)有4个边界条件:在该型值点两侧的两个相邻曲线段在该点处具有相同的一阶和二阶导数,并且两个曲线段都要通过该点。——4(n-1)个方程
②  曲线起点为第一个型值点P0,曲线终点为最后一个型值点Pn。——2个方程
③  在P0 和 Pn两点处设二阶导数为0。——2个方程


三次自然样条曲线能够做到曲线通过所有型值点。
 缺点:
① 必须解方程组。
② 整条曲线受所有型值点控制,如果型值点中有任何一个改动,则整条曲线都受影响。因此,不允许“局部控制”。
③ 在实际应用中很少采用三次自然样条曲线。 


Hermite样条曲线 

Hermite样条曲线是以法国数学家Charles Hermite命名的,它是一个分段三次多项式,并且在每个型值点处有给定的切线。
与三次自然样条曲线不同,Hermite样条曲线可以局部调整,因为每个曲线段仅依赖于端点约束。
整条曲线通过所有的型值点,对于每个曲线段来说,它通过两个相邻的型值点。

Hermite样条曲线段的确定:
 已知:设曲线段的起点和终点分别为P0和P1,并且曲线段在两端点处的切矢量分别为P'0和P'1。参变量t是在两个端点取值0和1之间变化。
                   
对于每个三次曲线段,有了四个独立条件:两个端点的位置向量以及曲线段在两端点处的切矢量。根据这四个条件可以得到方程组,求出分段表达式(4-13)中的四个系数: 

P0 = B1 + B2t + B3t2 + B4t3 = B1                   (当t=0)

P1 = B1 + B2t + B3t+ B4t3 = B1 + B2+ B3 + B4         (当t=1)

P'0 = B2 + 2B3t + 3B4t2 = B2                      (当t=0)   (4-14)

P'1 = B2 + 2B3t + 3B4t2 = B2 + 2B3 + 3B4             (当t=1)

式(4-14)写成矩阵形式:

           

求解上述方程组中的B1、B2、B3、B4,可得Hermite样条曲线的矩阵表达式:

       

将式(4-16)展开,得到第k段Hermite样条曲线的表达式:

  P(t) = Pk(2t3-3t2+1) + Pk+1(-2t3+3t2) + Pk'(t3-2t2+t) + Pk+1'(t3-t2)       (4-17)

Hermite样条曲线能局部修改,对某些数字化应用有用。但对计算机图形学中的大部分问题而言,除了型值点坐标外,更好的做法是不需要输入曲线斜率值或其它几何信息就能生成样条曲线。因此,出现了Cardinal样条,它不需要输入控制点上的曲线导数值,而是采用控制点的坐标位置来计算导数。 


Cardinal样条曲线

Cardinal样条曲线也是分段三次插值曲线,并且每个曲线段端点处均指定切线,但不一定要给出端点处的切线值。
一个Cardinal样条曲线段由四个连续控制点给出。中间两个控制点是曲线段的端点,另外两个控制点用来计算端点斜率。 

设P(t)是两个控制点Pk和Pk+1间的参数三次函数式,则从Pk-1到Pk+2间的4个控制点用于建立Cardinal样条曲线段的边界条件: 

                     

                      P0 = Pk

                      P1 = Pk+1

                      P'0 = 1/2(1- ts)(Pk+1- Pk-1)           (4-18)

                      P'1 = 1/2(1- ts)(Pk+2- Pk

控制点Pk和Pk+1处的斜率分别与弦Pk-1Pk+1和PkPk+2成正比。

参数ts:称为张力参数,它控制Cardinal样条曲线与输入控制点之间的松紧程度。

                  

张力参数 ts 在Cardinal曲线形状中的作用:

                 

以将边界条件式(4-18)转换成矩阵形式: 

       

其中,s = (1-ts)/2。

将矩阵形式(4-19)展开,得Cardinal样条曲线多项式形式:

P(t) = Pk-1(-st3 + 2st2 - st) + Pk[(2-s)t3 + (s-3)t2 + 1] +

          Pk+1[(s-2)t3 + (3-2s)t2 + st] + Pk+2(st3 - st2)             (4-20) 


0 0
原创粉丝点击