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

三次样条曲线算法的改进及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]

相关文章:
Java第三次作业第二题
Java第三次作业第二题_IT认证_资格考试/认证_教育专区。冯杰俊——《Java ...《Java 语言》课程期末作业 题学专班学姓 目院业别号名 第 2 题: 计算器...
三次B样条曲线插补算法的VC实现
三次B 样条曲线插补算法的 VC 实现孔凡国,郝尚华,钟廷志 (五邑大学 机电系,广东 江门 529020) 摘要:结合三次 B 样条曲线的数学性质,理论分析了三次 B 样条...
实验四 三次样条实验报告
二、实验内容和要求 实验给出型值点,用 VC++ 画出通过给定型值点的三次参数样条曲线。 三、实验方案设计 实验方案设计说明,包括主要设计思路、算法设计、程序...
三次样条插值实现原理
三次样条插值的实现原理: 对于 n+1 个给定点的数据集{xi},我们可以用 n ...这样就得到自然三次样条。自然三次样条几乎等同于样条设备生成的曲线。 在这些...
三次Bezier曲线原理及实现代码
三次Bezier曲线原理及实现代码_工学_高等教育_教育专区。c语言编写三次Bezier...贝塞尔曲线最初由 Paul de Casteljau 于 1959 年 运用 de Casteljau 算法开发,...
三次样条拟合典型实例
25 x 2 三次样条插值和三次曲线拟合,画出 f (...用于多项式插值的实现,代码如下: %lagrange 插值 x...清华大学出版社 [2] 吴振远.科学计算实验指导书 ...
用matlab实现3次样条曲线插值的算法程序
x(k)-x(j)); end end s=p*y(k)+s; end yi(i)=s; end 下面用 MATLAB 运行程序得到以下结果,如下图: 用 Matlab 实现3 次样条曲线插值的算法...
三次样条插值方法的应用
样条曲线实际上是由分段三次 曲线并接而成, 在连接点即样点上要求二阶导数...三、算法及流程按照传统的编程方法,可将公式直接转换为 MATLAB 可是别的语言即可...
Bezier曲线和样条曲线的生成算法
1、 编程实现在屏幕上绘制出三次 B 样条函数绘制曲线。 2、 编程实现在屏幕上绘制出光滑连接的三次 B 样条曲线。 三、 关键算法及实现原理 1、二次 Bezier...
三次样条
三次B样条曲线 33页 免费 三次样条算法 69页 1财富值 三次样条函数 4页...在这些方法中,三次样条是最常用的一种。在MATLAB中,实现基本的三次样条插值...
更多相关标签: