搜档网
当前位置:搜档网 › 三次样条曲线算法的改进及Java语言实现

三次样条曲线算法的改进及Java语言实现

三次样条曲线算法的改进及Java语言实现
三次样条曲线算法的改进及Java语言实现

三次样条曲线算法的改进及Java语言实现

[摘要]针对常规三次样条插值存在的不足,本文提出了结合微分弦长积累的改进型算法并给出了程序。该算法使得各给定的相邻离散点区间段能保证至少二阶导数连续,从而大大地提高了拟合曲线的光滑度。

[关键词]样条曲线,均方曲率,积累弦长,边界条件,Java

1 引言

美国数学家I.J.Schoenberg于1946年提出的B样条曲线,现在已得到了广泛的应用。在实际应用中,比较多的是采用3次B样条曲线。在文献[1]中给出了平面坐标系下的三次B样条插值曲线的方程式

三次B样条插值在各种可能的插值中使得均方曲率

为最小,即在一定意义下最为“光顺”。它可以保证各相邻离散样点区间段直到二阶导数连续,因而光滑度较高。所以该插值法也是在工程应用中使用得最多的一种插值方法。但在使用中我们发现,三次B样条插值也存在着一大缺陷,它不是局部化的,每个节点都会影响到全局,虽然影响是随着远离该点而衰退的,但是由于存在着误差的远距离扩散,使得样条插值也会有“多余”的波动,特别是在间距不均匀以及其它一些特殊场合更为显著[1]。

根据三次B样条插值函数的基本要求,函数变量必须单调递增(或减),这对于封闭性拟合曲线来说,难以实现。本文我们设想了采用普通三次B样条插值与微分弦长积累相结合的办法,即各相邻离散样点弦长积累,并以各样点积累弦长为自变量构造样点弦长函数,再与三次样条插值函数合并,寻求封闭样条曲线的最优拟合的办法。结果将该混合算法与原三次样条算法的求解过程进行比较和分析后,表明该算法能很好地解决上述样条插值的不足。

2 微分弦长累积原理

根据输入的离散样点,首先求出相邻点的积累弦长si和积累弦长差hi,再分别将离散点xi坐标的值(yi坐标同理)和si及hi代入三次B样条曲线函数,根据导数连续的性质和边界条件构造矩阵,利用高斯消元法求出Mxi(或Myi)。高斯消元法的基本思想是用逐次消去一个未知数(矩阵元素)的办法把原来的矩阵化为等价的(即具有相同解答的)三角形矩阵,再利用回代法求出该等价三角形矩阵的各未知数(矩阵变量),从而得出X关于弦长s的三次B样条函数X(s),(Y(s)同理),最后根据样条函数X(s)和Y(s),近似地将该拟合曲线分成若干小直线

相关主题