当前位置:首页 >> 电力/水利 >>

三次样条曲线算法的改进及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),近似地将该拟合曲线分成若干小直线 段,并将其绘出,最终得到所需要的三次 B 样条拟合曲线。 4 Java 语言实现 Java 是面向对象的、支持多线程的、体系结构独立的解释型动态语言, 具有高度的安全性、可移植性和代码可重用性,具有很高的运行效率,近年来 Java 已成为最受欢迎的面向对象程序设计语言之一, 是目前软件中极为健壮的编 程语言。 (1) 部分源代码: import java.applet.*; import java.awt.*; public class Spline extends Applet{ public Spline(){... ... } public void drawSpline(Graphics g){ ... ... for(i=0;i<N-1;i++){ nn=(s[i+1]-s[i])/20; for(j=1;j<21;j++){ a=s[i]+j*nn; x=Math.pow(s[i+1]-(a-nn),3)*Mx[i]/(6*hx[i]) +Math.pow(a-nn-s[i],3)*Mx[i+1]/(6*hx[i]) +(s[i+1]

相关文章:
三次样条曲线的生成算法的研究
三次样条曲线的生成算法本文由天空乐园河南自考网整理分享 摘要三次样条函数曲线具有的最高多项式插值精度是三次多项式函数,对其进行 推广构造的三次参数样条曲线应...
三次Bezier曲线的实现方法
贝塞尔曲线最初由 Paul de Casteljau 于 1959 年 运用 de Casteljau 算法开发,...Asymptote 和 Metafont,运用了以贝塞尔样条 组成的三次贝塞尔曲线,用来描绘曲线...
三次B样条曲线插补算法的VC实现
三次B 样条曲线插补算法的 VC 实现孔凡国,郝尚华,钟廷志 (五邑大学 机电系,广东 江门 529020) 摘要:结合三次 B 样条曲线的数学性质,理论分析了三次 B 样...
三次样条曲线插补模拟
用matlab实现三次样条曲线插补过程模拟,包括m文件程序和GUI界面截图,仅供学习和交流,不构成投资建议,最终解释权归机械1203班杨哲所有。用matlab实现三次样条曲线插补...
三次样条插值实现原理
三次样条插值的实现原理: 对于 n+1 个给定点的数据集{xi},我们可以用 n 段三次多项式在数据点之间构建 一个三次样条。如果 表示对函数 f 进行插值的样条...
Bezier曲线和样条曲线的生成算法
1、 编程实现在屏幕上绘制出三次 B 样条函数绘制曲线。 2、 编程实现在屏幕上绘制出光滑连接的三次 B 样条曲线。 三、 关键算法及实现原理 1、二次 Bezier...
三次Bezier曲线原理及实现代码
c语言编写三次Bezier曲线 曲线原理及实现代码(c++) ...Casteljau 算法开发,以稳定数值的方法求出贝塞尔曲线...字型就运用了以贝塞尔样条组成的二次贝塞尔曲线。 ...
三次B样条曲线
三次周期B样条曲线的算法 11页 免费喜欢此文档的还喜欢 三次B样条曲线 33页 免费 B样条曲线生成原理及实现 4页 免费 三次B样条曲线 2页 5财富值 b样条...
数值分析课程设计(三次样条插值)
计算机上实现,但只 能保证各小段曲线在连接处的...[3]环境下根据上述算法步骤进行编 程,源程序如下:...5 结论 Matlab 环境下编写求解三次样条插值的通用...
更多相关标签:
clock改进算法实现 | 算法 c语言实现 | aes加密算法c语言实现 | rsa算法c语言实现 | rsa加密算法c语言实现 | des加密算法c语言实现 | des算法c语言实现 | aes算法c语言实现 |