`

三次样条曲线

阅读更多
原文地址: http://www.math.ucla.edu/~baker/149.1.02w/handouts/dd_splines.pdf

1.概览
高次多项式参数曲线有一个缺点:requirements placed on one stretch of such a curve can have a very strong effect some distance away.在图1中,在中间附近的数据点的高度跳对插值多项式曲线的两端附近有强烈的影响。

图1:数据点的拉格朗日插值

图2:同一数据的点样条插值

相反,图2显示通过相同的数据点的“三次样条”曲线的一个例子。注意,how it follows them much more closely。

样条曲线是通过使用一个每两个数据点之间的不同的三次多项式曲线构造的(The spline curve was constructed by using a different cubic polynomial curve between each two data points)。换句话说,它是一个分段三次曲线,把不同的立方曲线粘在一起。每段衔接得是如此接近,衔接点一点都不明显。
事实上,如果显示整个曲线是一个单一的函数描述p(t),p(t)是如此平滑,它处处有一个二阶导数并且这个二阶导数是连续的。

定义。 三次样条曲线是有连续的二阶导数的分段三次曲线.

“样条”实际上指的是细木条或金属条。这些曲线一度为船只和飞机设计,通过安装实际的木条或金属条来让他们通过设计好的数据点但是能自由移动。由于物理学原理,这样的曲线是近似有连续的二阶导数的分段三次曲线--如果他们有适当的参数化。

你可能还记得演算,在每个点的曲线的曲率取决于二阶导数.最后指出,一个实际的木头或金属条没有理由弯曲,及其曲线的二阶导数是零。

定义。三次样条曲线是relaxed的如果在每个端点它的二阶导数是零。

我们将专注于轻松的三次样条曲线。正如你将看到的,他们既可以用于控制设计(B样条)或插值。为了简单方便地描述三次线段,我们将使用三次贝塞尔曲线。

2.一端是0值二阶导数的贝塞尔曲线

为了处理relexed end conditions,我们需要能够知道何时贝塞尔曲线在一端有0值二阶导数。......


3.粘合两个贝塞尔曲线

第一次尝试:匹配端点
让我们从两个可以粘在一起的贝塞尔曲线开始,其他不匹配的不研究。设第一个曲线控制点为P0,P1,P2,P3和第二曲线的控制点为Q0 Q1,Q2,Q3,,如图所示:

图3:第二个导数的例子
图4:粗略的粘合

图4。假设P3 = Q0。为方便起见,让S点代替他们,即S = P3 = Q0。结果如图4所示。

曲线有一个折角,因为在S点,第一个贝塞尔曲线的第一个导数 3(S - P2) 和另一个的第一个导数 3(Q1 - S),但是向量 S-P2 和 Q1 - S 甚至不具有相同的方向(请注意从一点减去另一点 即A-B,给出了B到A的向量)

第二次尝试:匹配值和一阶导数
如果我们要求S - P2 = Q1 - S,等价的,S就是线段PQ的中点,这样的话一阶导数在连接点相等,将会有一个更好的连接。图5显示了满足这个条件的例子。

图5: 一阶导数在连接点相等的更好的连接

这个例子当然看起来平滑。但是它还不理想。想象一下,在这个形状的轨道上运行快速火车。在第一个你在转弯的贝塞尔线段所以你被推向火车的左壁;在另一个转弯你被推向右侧。在连接点你从火车的一侧被猛拉向另一侧。为了得到更平滑的连接,那么这个曲率应该是连续的。由于曲率可以以一阶和二阶导数的形式表示,连续的曲率可以通过在粘合点的匹配的二阶导数实现,和一阶导数一样。

第三次尝试:匹配值,一阶导数和二阶导数
记得,在t = 1的第一个Bezier曲线和t = 0的另一个,贝塞尔曲线的二阶导数分别是 6(p1-2p2 + S)和6(s-2q1 + Q2)。因此我们要6(p1-2p2 + S)= 6(s-2q1 + Q2),或等价地,p1-2p2 = q2-2q1。有一种解释这一方程的有趣方式。等式两边都乘以-1,这样得到2p2-p1 = 2q1-q2.这么做的动机是,双方现在系数和都是1即代表一个点,independently of coordinatization。

左手边对应于一个特定的点A+位于通过P1和P2的线上。事实上,A+ = 2P2 - P1 = P2+1×(p2-p1),如图7所示。让我们称A+为第一控制点多边形的右顶点。同样的,右边的方程式是二个贝塞尔曲线的左顶点A- = 2Q - Q2,如图所示。

图6:几乎匹配的二阶导数的粘合

正如你看到的,这个例子中的两个顶点是不相等的,所以这个方程并不满足和贝塞尔曲线的二阶导数仍然不匹配。图7显示了一个匹配的例子,双方有同一个顶点A:

图7:匹配的二阶导数的粘合
图7的相关部分看起来像字母A或像一个A型金字塔型的小屋。

定义.一个A型结构是如图显示由点组成的图,在其中S是p2q1中点,P2是P2A中点,Q1是Q2A中点。如图8所示。

图8:A型结构

所以我们看到:

观察 如果两个贝塞尔曲线是连接在一个S点,当且仅当其控制多边形符合A-结构,他们的一阶导数和二阶导数匹配的。

注:匹配三阶导数听起来很有前途的,但是没有帮助,因为它要求所有曲线是一个third-degree曲线的一部分。因此,粘贴曲线的灵活性是便失去的。请看练习。

4.B样条曲线

制作一个控制点多的控制设计曲线的一种简单方法是使用B样条曲线。那些我们将讨论被称为放松的三次均匀B样条曲线。你开始通过指定控制多边形的点B0,B1,……Bn,最后你得到的曲线会如图9中那个一样。

这里的方法是,如果手工完成的:把每个控制多边形的边通过两个“分割”点一分为三。除了第一个和最后一个,在每个Bi,在相邻的两个“分割”点间画出线段,并称其中点为Si。然后你以Bi作为端点做出一个A型结构,如图所示。为了完整性,让S0 = B0和SN = BN。看看你能不能找到图10中的4个A型结构。

最后,从每个点Si到下一个勾画一个三次贝塞尔曲线,将四个点(Si,两个分割点,Si+1)作为贝塞尔控制点,如图11。

图9,10,11

如你所见,连接的点自动满足A结构的情况并且两端的二阶导数值是零。因此你获得了relaxed三次样条曲线。

在计算机上执行的方法是相同的;我们只需要依据原来的B-样条曲线的控制点上找到贝塞尔控制点:略

最后,让我们从数学上看看。让pi(t)是第i个贝塞尔曲线(0≤t≤1)。通过下列方程在0≤t≤n时这些n条曲线可以组合成一个单一的曲线P(t):
P(t) = p1(t) for 0<=t<=1
P(t) = p2(t-1) for 1<=t<=2,等等。
在一般情况下,
P(t) = pi(t-(i-1)) for i-1<=t<=i, where i=1,...,n。
那么P(t)是一个松弛的三次样条曲线。P(t)被称为均匀的样条曲线因为它的domain  0<=t<=n was made from intervals all of length 1。非均匀的曲线将在第10章中讨论。

B样条曲线的一个重要的优点是各个控制点的影响是局部的。事实上,曲线上任意一个点最多受4个B样条控制点的影响。原因是,对于贝塞尔曲线#i,所有的四个控制点可以通过了解Bi-2,Bi-1,Bi和Bi+1计算出来。类似的,控制点Bi只影响4个贝塞尔曲线线段:两个在Si点连接的和另外两个连接到这两个线段的。local effect 可以通过改变单一控制点来说明.在图12中,两个选择的中间控制点被标出,以及相应的B样条曲线。曲线上的点表示一些粘接点Si。

如果你不要relaxed end conditions? 在这种情况下,你就能使用更少的曲线,比方说从S1到Sn-1的部分,即 1<=t<=n。Bo和Bn还是能作为控制点影响部分你使用的曲线的形状。

图12

5.relaxed 三样条差值
假设你的兴趣不在控制设计而是插值。换句话说,给出数据点So,...,Sn并且你想要一个relexed的三次样条曲线P(t)(0≤t≤n),满足P(i)= Si;即,通过数据点的曲线。

一个简单的方法是使用B样条作为一个中间步骤。虽然这一次,你知道点S0,……,Sn,在你能够计算单个线段的贝塞尔控制点之前,你必须计算相应的控制点B0,……Bn。

当然,B0 = S0 and Bn = Sn。 为了找到B1,...,Bn-1, 我们能使用在上边发现的线性方程for the Si in terms of the Bi 并解出它们,将Bi作为未知数和Si为常数。当线性方程写成矩阵形式,他们看起来像这样(N = 5):
略。

在这里Bi和Bi是点,所以在R²中它们是数字对。这些方程是等价的两组具有相同的系数矩阵的方程组,一组为X坐标和y坐标。但是要解开它们,两个方法中的一个更直接的方法是更容易使用的。让M作为系数的矩阵(我们称它为“1 4 1 矩阵”), 让B*作为这样的矩阵,它的行是B1,...Bn-1,并且让C作为右侧的常量矩阵。

方法一(在计算机上):使用增广矩阵[M|C]彻底减少列数。答案将是[I|B*]。

方法二(在家庭作业或测试中):你会获得一个M^-1;解决方案是B* = M^-1 * C.

注意:略。

问题

后面的内容略。
分享到:
评论

相关推荐

    三次样条曲线拟合 三次样条曲线拟合

    三次样条曲线拟合是一种在数据点之间构造平滑曲线的方法,广泛应用于数据插值、曲线设计和信号处理等领域。这种技术确保了曲线在每个数据点处都具有连续的一阶导数和二阶导数,从而产生平滑且自然的过渡效果。 三次...

    三次样条曲线插值的基本原理及其C#实现_三次样条插值、C#_样条曲线_曲线平滑C_nan_

    三次样条曲线插值是一种在离散数据点之间构造平滑连续曲线的方法,它在计算机图形学、数据拟合和数值分析等领域有着广泛的应用。本文将深入探讨三次样条曲线插值的基本原理,并以C#语言为例,介绍其实现过程。 首先...

    C# GDI+ 鼠标经典绘制样条曲线 nurbs 三次样条曲线

    三次样条曲线是指每个局部多项式的最高阶为3,这通常能产生足够平滑的曲线,而不会过于复杂。 **C# GDI+的使用** 在C#中,GDI+提供了`Graphics`类,用于进行图形绘制。使用`Graphics`对象,我们可以绘制直线、曲线...

    自然三次样条曲线

    自然三次样条曲线是一种在计算机图形学、数值分析和数据拟合中广泛应用的数学方法。它允许我们在一组离散的数据点之间构造出平滑的曲线,同时保持端点的切线方向和曲率。这种曲线的特性使得它特别适合于数据插值和...

    自然三次样条曲线Java版

    自然三次样条曲线是一种在计算机图形学、数值分析和数据拟合中广泛应用的数学方法。在Java编程语言中实现自然三次样条曲线涉及到几个关键概念和技术。本文将深入探讨这些内容,帮助读者理解自然三次样条曲线的原理,...

    三次样条曲线.rar_三次样条_三次样条代码_三次样条曲线_曲线平滑_样条曲线

    3种源码,三次样条函数算法C++源代码,用于工程上计算平滑曲线的插值计算.

    图形化界面,matlab三次样条曲线拟合小程序

    在绘图区用鼠标点上点,然后在按钮区从左到右分别进行“自然边界条件”“二阶导数边界条件”“一阶导数边界条件”“三次样条曲线拟合1”“三次样条曲线拟合2”。自己编的一个很好玩的GUI程序,在这里给大家分享。对...

    三次样条曲线插值法用java实现.rar

    三次样条曲线插值法是一种在数学和计算机科学中广泛使用的数值分析技术,特别是在数据拟合和曲线平滑中。这种方法通过构建一个由多个三次多项式段组成的光滑连续曲线来逼近离散数据点,每个数据点处的曲线都会经过该...

    三次样条曲线拟合VC++

    三次样条曲线拟合是一种在计算机图形学、数据建模和信号处理中广泛使用的数学方法。在VC++环境中实现三次样条曲线拟合,可以让我们对离散数据点进行平滑处理,从而得到连续光滑的曲线。以下是关于三次样条曲线拟合...

    三次样条曲线的C语言实现

    三次样条曲线的C语言实现,程序具体的说明在我的博客里。

    VC++三次样条插值和贝塞尔曲线实例程序.zip_VC++ 三次样条_vc 贝塞尔曲线_三次样条曲线_曲线插值_贝塞尔曲线

    本篇文章将深入探讨两个关键概念:三次样条插值和贝塞尔曲线,以及它们在VC++环境中的实现。我们将通过分析标题和描述提供的信息,结合标签中的关键词,来详细阐述这两个概念及其在实际编程中的应用。 首先,我们来...

    平面三次样条曲线代码

    平面三次样条曲线是一种在计算机图形学、数值分析和数据拟合中广泛应用的数学工具。它通过一组平滑的三次多项式段连接离散数据点,以形成一条连续且光滑的曲线,确保在每个数据点处都有连续的一阶和二阶导数。这种...

    三次样条曲线(参数方程)python实现

    参考 # -- coding: utf-8 -- @Project: lecture @Time : 2020/4/29 21:54 @Author : Yang xu @Site : @File : parameter equation.py @IDE: PyCharm import numpy as np ... self.p = p # 型值

    三次样条曲线 VB实例

    三次样条曲线是一种在计算机图形学、数值分析和数据拟合等领域广泛应用的数学工具,它能够根据一组离散的数据点生成一条平滑的连续曲线。VB(Visual Basic)是微软开发的一种面向对象的编程语言,它提供了丰富的库和...

    三次样条曲线拟合类,可用于样条插值、拟合、预测等算法场合

    三次样条曲线拟合类,可用于样条插值、拟合、预测等算法场合。(The Cubic Spline Interpolation class can be used for spline interpolation, fitting, prediction and other algorithms.)

    statistics.zip_三次样条拟合_曲线拟合_样条曲线

    用此程序,可将一条曲线离散成散点,并用三次样条曲线重新拟合,使其具有良好而形态。

    CAD三次样条曲线的绘制.zip

    在CAD(计算机辅助设计)领域,三次样条曲线是一种常用的数据拟合方法,它能够平滑地连接一系列离散数据点,广泛应用于工程制图、机械设计和图形生成等场景。MATLAB是一款强大的数学计算软件,它提供了丰富的函数库...

Global site tag (gtag.js) - Google Analytics