三次样条曲线

原文地址: 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.

注意:略。

问题

后面的内容略。

猜你喜欢

转载自flxchy4.iteye.com/blog/2038942