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

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

相关文章:
三次B样条曲线插补算法的VC实现
三次B 样条曲线插补算法的 VC 实现孔凡国,郝尚华,钟廷志 (五邑大学 机电系,广东 江门 529020) 摘要:结合三次 B 样条曲线的数学性质,理论分析了三次 B 样...
蓝桥杯经典例题(Java语言实现)
暂无评价|0人阅读|0次下载|举报文档蓝桥杯经典例题(Java语言实现)_IT认证_资格...数列排序 import java.util.Scanner; public class Main { public static void ...
Java语言程序设计基础篇前三章课后习题
暂无评价|0人阅读|0次下载|举报文档Java语言程序设计...第1章 计算机、程序和 Java 概述 1.1(显示三条...: 3.8(对三个整数排序)编写程序对三个整数排序。...
用matlab实现3次样条曲线插值的算法程序
x(k)-x(j)); end end s=p*y(k)+s; end yi(i)=s; end 下面用 MATLAB 运行程序得到以下结果,如下图: 用 Matlab 实现3 次样条曲线插值的算法...
计算机图形学实验作业三
4、编程实现在屏幕上绘制出三次 B 样条函数绘制曲线。 5、编程实现在屏幕上绘制出光滑连接的三次 B 样条曲线。 二、 关键算法及实现原理 1、二次 Bezier ...
计算方法大作业-三次样条
计算方法大作业-三次样条_理学_高等教育_教育专区。关于三次样条插值的MATLAB实现计算方法第二次大作业姓名: 学号: (3)将第(1)题中所得的样条曲线整体顺...
Java语言与WWW技术形成性考核第三次作业
Java语言与WWW技术形成性考核第三次作业_计算机软件及应用_IT/计算机_专业资料。...2 . AWT 中菜单的实现主要依靠的三种组件是 菜单条 、 菜单 和 菜单项 。 ...
三次B样条曲线
三次B样条曲线_IT/计算机_专业资料。1) 理解并掌握三次Bezier曲线。 2) 根据三次Bezier曲线的参数方程绘制一条三次Bezier曲线,要求用C或C++编写源程序。 3) ...
实验四 三次样条实验报告
二、实验内容和要求 实验给出型值点,用 VC++ 画出通过给定型值点的三次参数样条曲线。 三、实验方案设计 实验方案设计说明,包括主要设计思路、算法设计、程序...
三次Bezier曲线的实现方法
三次Bezier曲线的实现方法_计算机软件及应用_IT/计算机_专业资料。三次Bezier曲线...("::Bezier 样条计算公式由 法国雷诺汽车公司的工程师 Pierm Bezier 于六十...
更多相关标签:
c 实现改进euler算法 | 算法 c语言实现 | rsa算法c语言实现 | des加密算法c语言实现 | rsa加密算法c语言实现 | md5算法c语言实现 | aes加密算法c语言实现 | fft算法c语言实现详解 |