1.样条曲线简介
样条曲线(Spline)本质是分段多项式实函数,在实数范围内有: S:[a,b]→R ,在区间 [a,b] 上包含 k 个子区间[ti−1,ti],且有:
a=t0<t1<⋯<tk−1<tk=b(1)
对应每一段区间 i 的存在多项式: Pi:[ti−1,ti]→R,且满足于:
S(t)=P1(t) , t0≤t<t1,S(t)=P2(t) , t1≤t<t2,⋮S(t)=Pk(t) , tk−1≤t≤tk.(2)
其中, Pi(t) 多项式中最高次项的幂,视为样条的阶数或次数(Order of spline),根据子区间 [ti−1,ti] 的区间长度是否一致分为均匀(Uniform)样条和非均匀(Non-uniform)样条。
满足了公式 (2) 的多项式有很多,为了保证曲线在 S 区间内具有据够的平滑度,一条n次样条,同时应具备处处连续且可微的性质:
P(j)i(ti)=P(j)i+1(ti);(3)
其中 i=1,…,k−1;j=0,…,n−1 。
2.三次样条曲线
2.1曲线条件
按照上述的定义,给定节点:
t:z:a=t0z0<t1z1<⋯⋯<tk−1zk−1<tkzk=b(4)
三次样条曲线满足三个条件:
- 在每段分段区间 [ti,ti+1],i=0,1,…,k−1 上, S(t)=Si(t) 都是一个三次多项式;
- 满足 S(ti)=zi,i=1,…,k−1 ;
- S(t) 的一阶导函数 S′(t) 和二阶导函数 S′′(t) 在区间 [a,b] 上都是连续的,从而曲线具有光滑性。
则三次样条的方程可以写为:
Si(t)=ai+bi(t−ti)+ci(t−ti)2+di(t−ti)3,(5)
其中, ai,bi,ci,di 分别代表 n 个未知系数。
- 曲线的连续性表示为:
Si(ti)=zi,(6)
Si(ti+1)=zi+1,(7)
其中 i=0,1,…,k−1 。
- 曲线微分连续性:
S′i(ti+1)=S′i+1(ti+1),(8)
S′′i(ti+1)=S′′i+1(ti+1),(9)
其中 i=0,1,…,k−2 。
- 曲线的导函数表达式:
S′i=bi+2ci(t−ti)+3di(t−ti)2,(10)
S′′i(x)=2ci+6di(t−ti),(11)
令区间长度 hi=ti+1−ti ,则有:
-
由公式 (6) ,可得: ai=zi ;
-
由公式 (7) ,可得: ai+bihi+cih2i+dih3i=zi+1 ;
-
由公式 (8) ,可得:
S′i(ti+1)=bi+2cihi+3dih2i ;
S′i+1(ti+1)=bi+1 ;
⇒bi+2cihi+3dih2i−bi+1=0 ; -
由公式 (9) ,可得:
S′′i(ti+1)=2ci+6dihi ;
S′′i+1(ti+1)=2ci+1 ;
⇒2ci+6dihi=2ci+1 ;设 mi=S′′i(xi)=2ci ,则:
A. mi+6dihi−mi+1=0⇒
di=mi+1−mi6hi ;B.将 ci,di 代入 zi+bihi+cih2i+dih3i=zi+1⇒
bi=zi+1−zihi−hi2mi−hi6(mi+1−mi) ;C.将 bi,ci,di 代入 bi+2cihi+3dih2i=bi+1⇒
himi+2(hi+hi+1)mi+1+hi+1mi+2=6[zi+2−zi+1hi+1−zi+1−zihi].(12)
2.2端点条件
在上述分析中,曲线段的两个端点 t0 和 tk 是不适用的,有一些常用的端点限制条件,这里只讲解自然边界。
在自然边界下,首尾两端的二阶导函数满足 S′′=0 ,即 m0=0 和 mk=0 。
3.三次样条插值类的实现
头文件
/*
*Cubic spline interpolation class.
*
*/
#ifndef CUBICSPLINEINTERPOLATION_H
#pragma once
#define CUBICS