(26)二次插值样条曲线

在拟合生成样条曲线的众多方法中,首先来讨论用插值方法生成通过给定离散型值点的二次样条曲线,即抛物样条曲线。


已知不在同一直线上的三点P1、P2、P3,要求通过给定的这三点定义一条抛物线。

                    (26)二次插值样条曲线_第1张图片

二次样条曲线的参数化表达式为:

           P(t) = A1 + A2t + A3t2    (0≤t≤1)          (4-1)

A1、A2、A3为表达式的系数,且是向量形式。若是二维平面曲线,则为二维向量;若是三维空间曲线,则为三维向量。


确定系数A1、A2、A3的三个独立条件:

该曲线过P1、P2、P3三个点,并且:

①曲线段以P1点为始点。即当参变量t = 0时,曲线过P1点;

②曲线段以P3点为终点。即当参变量t = 1时,曲线过P3点;

③当参变量t = 0.5时,曲线过P2点,且切矢量等于P3–P1

                (26)二次插值样条曲线_第2张图片

根据以上设定的三个独立条件,可以列出方程组:

       t = 0:   P(0) = A1 = P1

       t = 1:   P(1) = A1+ A2+ A3 = P3          (4-2)

       t = 0.5:  P(0.5) = A1+0.5A2+0.25A3 = P2 

解得三个系数A1、A2、A3分别为: 

        A1 = P1

      A2 = 4P2– P3– 3P1                (4-3)

      A3 = 2P1+ 2P3– 4P2

把求出的三个系数代入到式(4-1)中,可得:

     P(t)= A1 + A2t + A3t2

      = P1 +(4P2 – P3 – 3P1)t + (2P1+2P3 – 4P2)t2       (0≤t≤1)

      = (2t2 – 3t + 1)P1 + (–4t2 + 4t)P2 + (2t2 – t)P3            (4-4)

把式(4-4)改写成矩阵形式为:

        (26)二次插值样条曲线_第3张图片

式(4-5)中的P(t)是一个点向量,在二维平面上它包含了两个坐标值[x(t), y(t)],故式(4-5)的直观形式可以写成如下形式:

       (26)二次插值样条曲线_第4张图片

二次插值样条曲线的加权合成 

设有一个离散型值点列Pi(i = 1, 2, …,n),可以按式(4-5) 每经过相邻三点作一段抛物线,由于有n个型值点,所以像这样的抛物线段一共可以作出n–2条。
            (26)二次插值样条曲线_第5张图片

第i条抛物线段经过Pi、Pi+1、Pi+2三点,其表达式为:

   Si(ti)=(2ti2–3ti+1)Pi+(4ti–4ti2)Pi+1+(2ti2–ti)Pi+2   (0≤ti≤1)    (4-7)

第i+1条抛物线段经过Pi+1、Pi+2、Pi+3三点,其表达式为:

   Si+1(ti+1)=(2ti+12–3ti+1+1)Pi+1+(4ti+1–4ti+12)Pi+2+(2ti+12–ti+1)Pi+3   (0≤ti+1≤1)   (4-8) 

         (26)二次插值样条曲线_第6张图片

经过四点所画出的两条抛物线段Si(ti)和Si+1(ti+1)的图形

一般来说,每两段曲线之间的搭接区间,两条抛物线是不可能重合的。Si和Si+1两条抛物线在Pi+1和Pi+2两点之间为搭接区间,在该区间内,Si和Si+1不太可能自然地重合成一条曲线。

对于拟合曲线来说,整个型值点列必须只能用一条光滑曲线连接起来。因此,在Si和Si+1两条曲线的搭接区间内,必须有一个方法能够让它们按照一定的法则结合成一条曲线,这样结合的方法就是加权合成。  

 在加权合成过程中,首先要选择两个合适的权函数。这里选择的两个权函数分别设为f(T)和g(T),加权合成后的曲线用Pi+1(t)表示,则:

          Pi+1(t) = f(T)·Si(ti) + g(T)·Si+1(ti+1)           (4-9)

在抛物样条曲线中,权函数f(T)和g(T)都是简单的一次函数,且它们之间存在互补性。它们分别为:
                         f(T) = 1–T
                         g(T) = T                    (0≤T≤1) 

这样,式(4-9)可改写为:

             Pi+1(t) = (1–T)·Si(ti) +T·Si+1(ti+1)           (4-10)

式(4-10)中包含了三个参变量T、ti、ti+1,必须要统一这三个参变量: 

         (26)二次插值样条曲线_第7张图片

这里选择 t 作为统一后的参变量,把原有的三个参变量T、ti、ti+1都化成唯一含有t的形式,并给t 规定一个合适的取值范围。假设t的取值范围为:0≤t≤0.5,则三个参变量可统一形式为:

                             T = 2t
                             ti = 0.5 + t          0≤t≤0.5
                             ti+1 = t 

则式(4-10)可根据新的参变量t 改写成如下形式:

           Pi+1(t) = (1–2t)·Si(t + 0.5) + 2t·Si+1(t)          (4-11)

其中:

     Si(t+0.5) = (2t2–t)Pi+(1–4t2)Pi+1+(2t2+t)Pi+2

     Si+1(t) = (2t2–3t+1)Pi+1+(4t–4t2)Pi+2+(2t2–t)Pi+3 

把以上两式代入式(4-11),展开、整理后可得:

    Pi+1(t) = (–4t3 + 4t2 –t)Pi + (12t3–10t2 +1)Pi+1                                     + (–12t3 + 8t2 + t)Pi+2 + (4t3– 2t2)Pi+3 (i = 1,2,…, n–3) (0≤t≤0.5)      (4-12)

           (26)二次插值样条曲线_第8张图片

假如一个离散点列Pi具有n个型值点,即i=1,2,…,n。那么根据式(4-12),加权合成后可以生成n–3段抛物样条曲线。即式(4-12)中的i的取值范围为:i =1~n–3。

 

二次插值样条曲线的端点条件

根据式(4-12),在全部型值点列 Pi (i=1,2,…,n) 中,只能得到n–3段曲线。但n个型值点之间应该有n–1个区段。主要是因为点列的首、尾两段曲线P1P2和Pn–1Pn段,由于缺乏连续相邻的四点这样的条件而无法产生。

为了要产生首尾两段曲线,可以在原点列的两端各增加一个辅助点P0和Pn+1。    

       (26)二次插值样条曲线_第9张图片

增加点P0和点Pn+1的三种方法:

① 已知两端的切矢P'1和P'n

在由P1、P2、P3三点所确定的抛物线中,过P2点曲线的切矢

                P' 2 = P3–P1        即:P1 = P3–P'2

根据上面的原理可得:

               P'1 = P2–P0            ∴ P0= P2–P'1

               P'n = Pn+1–Pn–1     ∴ Pn+1 = Pn–1+ P'n

这种端点情况,一般适用于所求的曲线要和已经存在的曲线或直线相连接。 

②自由端条件

让补点P0 和Pn+1与原两端点P1和Pn分别重合,即:

                    P0 = P1

                    Pn+1 = Pn 

这种补点方法称为自由端条件,该方法一般适用于对曲线的两端没有特殊要求。

③ 形成封闭曲线

在n个型值点之间形成封闭曲线,要生成n个曲线段,而不是原来的n–1段。所以在补点中要增加3个点,首先让首尾两点重合,然后各向前后延长一点,即:

            Pn+1 = P1

            P0 = Pn

            Pn+2 = P2 

 

二次插值样条曲线的性质

二次插值样条曲线的连续性问题:

1、相邻两曲线段Pi+1(t)和Pi+2(t)在型值点P处相连。并且Pi+1(t)在P点处的参变量t =0.5,而Pi+2(t)在P点处的参变量t =0。

2、满足C1连续,即Pi+1 ’(0.5) = Pi+2 ’(0) = Pi+3-Pi+1

               (26)二次插值样条曲线_第10张图片

Pi+1(t) = (-4t3 + 4t2 – t)Pi+ (12t3 – 10t2 + 1)Pi+1 

            + (-12t3 + 8t2 + t)Pi+2 + (4t3 – 2t2)Pi+3             (0≤t≤0.5) 

Pi+1’(t) = (-12t2 + 8t – 1)Pi + (36t2 – 20t)Pi+1 

            +(-36t2 + 16t + 1)Pi+2 + (12t2 – 4t)Pi+3

当t = 0.5时:Pi+1’(0.5) = Pi+3 – Pi+1

Pi+2’(t) = (-12t2 + 8t – 1)Pi+1 + (36t2 – 20t)Pi+2 

                    +(-36t2 + 16t + 1)Pi+3 + (12t2 – 4t)Pi+4

当t = 0时:Pi+2’(0) = Pi+3 – Pi+1

因此得出Pi+1 ’(0.5) = Pi+2 ’(0) ,说明可以达到C1连续。





 
 

 

 



 

 

 

 




 


你可能感兴趣的:(计算机图形学)