快速分段3次样条曲线拟合和折线重采样算法实现

本文采用3次样条函数,用分段插值的快速计算方法,实现了用鼠标在屏幕上绘制任意光滑的曲线, 并同时使用折线重采样的拟合方法,去除多余的插值点。本文所叙述的算法,可以用来绘制等高线等光 滑曲线,并且由于采用了折线的重采样,以最小的数据量保证了绘图的精确度。

本文以作者2002年根据《计算方法》(同济大学出版社)一书所述的算法为基础修改而得,因为时间 久远,这里不再叙述什么是张力样条的具体公式。仅仅对张力样条做简单介绍。

1 问题的提出

在曲线数字化,或绘制曲线的应用中,通常要求曲线是光滑的,并且通过控制点。这在高等数学里, 有专门的术语描述--导数的连续性。我们这里做个形象的比喻:拿一根弹性强的硬钢丝,通过固定在木 板上的一系列点,就得到一条满足我们要求的光滑的曲线。当我们在钢丝的2端,施加巨大的拉力,可以 看到,钢丝在固定点处的光滑程度越来越小,直到变为折线段。这个力就是张力。我们用一个系数表示 ,就是张力系数f。张力系数是张力的倒数,当f=0时,张力最大,曲线退化为折线段。当f=1,基本类似 抛物线。比较合适的取值是:

f=0.1666667

2 样条函数

关于样条函数,我实在忘记原理了。请读者自行学习原理的部分。实际当中,通常是用分段拟合的方 法:

给定木板上(p0,p1,p2,p3)4个固定点,要求样条钢丝依次通过这4个点,我们就可以确定p1,p2 之间的样条函数公式。根据这个公式和一定的步长step,就可以插值出p1,p2之间的一系列点 q1,q2,...,qn。依次用线段连接这些点,就得到用折线段按拟合出来的样条曲线。步长越小,拟合出的 折点越多,越接近曲线的真实值。然而数据量就越多。

3 分段拟合方法

给点一系列固定点p0,p1,p2,...,pn-3,pn-2,pn-1,依次采样上面的分段拟合方法:

1)  拟合p0,p1,p2,p3得到p1,p2间的点:q11,q12,q13,...,q1m。

2)  拟合q1m,p2,p3,p4得到p2,p3间的点:q21,q22,q23,...,q2n。

3)  拟合q2n,p3,p4,p5得到p3,p4间的点:q31,q32,q33,...,q3w。

4)  ...

按上面的方法,一直拟合出:pn-3,pn-2间的点。

上面这些拟合点和原来的控制点,按次序就构成了整条函数曲线的拟合折线。采样这种拟合方法,计 算量小,极易编制程序。

时间: 2024-10-13 21:25:02

快速分段3次样条曲线拟合和折线重采样算法实现的相关文章

R语言数据挖掘

数据分析与决策技术丛书 R语言数据挖掘 Learning Data Mining with R [哈萨克斯坦]贝特·麦克哈贝尔(Bater Makhabel) 著 李洪成 许金炜 段力辉 译 图书在版编目(CIP)数据 R语言数据挖掘 / (哈)贝特·麦克哈贝尔(Bater Makhabel)著:李洪成,许金炜,段力辉译. -北京:机械工业出版社,2016.9 (数据分析与决策技术丛书) 书名原文:Learning Data Mining with R ISBN 978-7-111-54769-

TCP协议疑难杂症全景分析

说明: 1).本文以TCP的发展历程解析容易引起混淆,误会的方方面面 2).本文不会贴大量的源码,大多数是以文字形式描述,我相信文字看起来是要比代码更轻松的 3).针对对象:对TCP已经有了全面了解的人.因为本文不会解析TCP头里面的每一个字段或者3次握手的细节,也不会解释慢启动和快速重传的定义 4).除了<TCP/IP详解>(卷一,卷二)以及<Unix网络编程>以及Linux源代码之外,学习网络更好的资源是RFC 5).本文给出一个提纲,如果想了解细节,请直接查阅RFC 6).翻

你不知道的秘籍 百度的中文分词三点原理

百度中文分词算法:指搜索引擎为了更好的辨别用户的需求,并且为了快速提供给用户需求性信息而使用的算法. 搜索引擎要在单位时间内处理千万亿级的页面数据量,因此搜索引擎拥有一个中文词库.比如百度现在大约有9万个中文词,那么搜索引擎就可以对千亿级的页面进行分析,按照中文词库进行了分类. 百度分词基本有三种分法 1.基于理解:傻瓜式匹配,小于等于3个中文字符百度是不进行切词的,比如搜索"大学堂". 2.基于统计:百度把一个词标红的原因:标红的词一般是一个关键词,你搜索"学"字

百度十一位现象背后隐藏的大机会

如果有一天你在搜索关键词时发现自己的网站排名突然掉出第一页,排在了第二页的首位,也就是百度搜索结果的第十一位,这就意味着你遇到了传说中的"百度十一位"现象,这也是相对于Google而言,百度自己的一种类似于Google"沙盒"的机制.许多站长在遇到这种现象时会感觉到网站受到了百度的惩罚,似乎情况非常严重,事实上并非完全如此,面对十一位现象不必过度担心,事实上这其中不是满含危险,而是隐藏着大机会! 根据笔者的统计和分析,对于许多排名稳定的老站而言,基本上不会遇到百度十

怎么通过c#编程对DEM进行随机采样、规则采样啊

问题描述 怎么通过c#编程对DEM进行随机采样.规则采样啊求思路和代码啊 解决方案 解决方案二:一空间数据压缩算法1基于矢量的压缩算法2基于栅格的压缩算法二空间数据内插算法1点的内插算法2区域内插算法3采样点曲线拟合三空间数据转换算法1矢量数据向栅格数据转换2栅格数据向矢量数据转换3TIN向规则格网DEM转换四空间数据误差分析算法1属性误差的分析算法2位置误差分析算法五多边形自动生成与裁剪算法1多边形性质及有关处理2弧-弧拓扑生成算法3多边形自动生成算法4多边形图裁剪算法六TIN的构建算法1基于

第五章、虚拟存储器

第五章.虚拟存储器 虚拟存储器定义:指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统. 虚拟存储器特征 多次性 对换性 虚拟性 虚拟内存的实现方式 请求分页存储管理 请求分段存储管理 请求段页存储管理 页面置换算法 最佳置换算法(Optimal) 概念:其所选择的被淘汰的页面将是以后永不使用获取是在最长时间内不再访问的页面. 向后看,谁最后被访问置换谁. 例子: 先进先出置换算法(FIFO) 淘汰最先进入内存的页面,即选择在内存中驻留时间最大的页面. 例子: 最近最久未

HashMap 底层算法分析

Hash算法 HashMap使用Hash算法,所以在解剖HashMap之间,需要先简单的了解Hash算法,Hash算法一般也成为散列算法,通过散列算法将任意的值转化成固定的长度输出,该输出就是散列值,这是一种压缩映射,也就是,散列值的空间远远小于输入的值空间.简单的说,hash算法的意义在于提供了一种快速存取数据的方法,它用一种算法建立键值与真实值之间的对应关系,(每一个真实值只能有一个键值,但是一个键值可以对应多个真实值),这样可以快速在数组等里面存取数据. 下面我们建立一个HashMap,然

性能测试-文本相似度分析的性能检测?

问题描述 文本相似度分析的性能检测? 利用tf-idf算法和余弦相似度算法计算了文本之间的相似度,可是结果出来了,不知道结果的好坏啊,请问大神们有没有知道怎么评测结果的好坏啊? 解决方案 分析算法复杂度.如果算法太复杂,分析起来有困难,评价算法的好坏就是给数据量大小不等的测试样本,运行得到耗费的时间. 对数据量和运行时间的曲线拟合. 糟糕的算法就是随着数据量的增加,时间或者存储的开销呈现几何级数地发散出去. 好的算法是,时间随着数据的增加,呈现常数.收敛在某个值或者是线性增加的. 解决方案二:

《算法导论(原书第3版)》一1.2 作为一种技术的算法

1.2 作为一种技术的算法 假设计算机是无限快的并且计算机存储器是免费的,你还有什么理由来研究算法吗?即使只是因为你还想证明你的解法会终止并以正确的答案终止,那么回答也是肯定的. 如果计算机无限快,那么用于求解某个问题的任何正确的方法都行.也许你希望你的实现在好的软件工程实践的范围内(例如,你的实现应该具有良好的设计与文档),但是你最常使用的是最容易实现的方法. 当然,计算机也许是快的,但它们不是无限快.存储器也许是廉价的,但不是免费的.所以计算时间是一种有限资源,存储器中的空间也一样.你应该明