在拟合生成样条曲线的众多方法中,首先来讨论用插值方法生成通过给定离散型值点的二次样条曲线,即抛物样条曲线。
已知不在同一直线上的三点P1、P2、P3,要求通过给定的这三点定义一条抛物线。
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。
根据以上设定的三个独立条件,可以列出方程组:
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)改写成矩阵形式为:
式(4-5)中的P(t)是一个点向量,在二维平面上它包含了两个坐标值[x(t), y(t)],故式(4-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)
经过四点所画出的两条抛物线段Si(ti)和Si+1(ti+1)的图形
一般来说,每两段曲线之间的搭接区间,两条抛物线是不可能重合的。Si和Si+1两条抛物线在Pi+1和Pi+2两点之间为搭接区间,在该区间内,Si和Si+1不太可能自然地重合成一条曲线。
对于拟合曲线来说,整个型值点列必须只能用一条光滑曲线连接起来。因此,在Si和Si+1两条曲线的搭接区间内,必须有一个方法能够让它们按照一定的法则结合成一条曲线,这样结合的方法就是加权合成。
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,必须要统一这三个参变量:
这里选择 t 作为统一后的参变量,把原有的三个参变量T、ti、ti+1都化成唯一含有t的形式,并给t 规定一个合适的取值范围。假设t的取值范围为:0≤t≤0.5,则三个参变量可统一形式为:
T = 2t则式(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)
假如一个离散点列Pi具有n个型值点,即i=1,2,…,n。那么根据式(4-12),加权合成后可以生成n–3段抛物样条曲线。即式(4-12)中的i的取值范围为:i =1~n–3。
增加点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
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连续。