本文采用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间的点。
上面这些拟合点和原来的控制点,按次序就构成了整条函数曲线的拟合折线。采样这种拟合方法,计 算量小,极易编制程序。