B-样条曲线(B-spline Curve)总结

概述

B-样条曲线,是B-样条基函数的线性组合,是贝塞尔曲线的一般化。
给定n+1个控制点,P0,P1, ..., Pn以及一个节点向量U = { u0,u1, ..., um }, p 次B-样条曲线由这些控制点和节点向量U 定义,其公式为:

B-样条曲线公式

在上式中, Ni,p(u)是 p次B-样条基函数。

B-样条基函数

节点向量

设U 是m + 1个非递减数的集合,u0 <=u1 <= u2 <= ... <= um。ui称为节点(knots), 集合U 称为节点向量(knot vector), 半开区间[ui, ui+1) 是第i个节点区间(knot span)。注意某些ui可能相等,某些节点区间会不存在。如果一个节点ui出现 k 次 (即,ui = ui+1 = ... = ui+k-1), 其中 k > 1, ui 是一个重复度(multiplicity)为k 的多重节点,写为 ui(k)。 否则,如果ui只出现一次,它是一个简单节点。如果节点等间距(即, ui+1 - ui 是一个常数,对 0 <= i <= m - 1),节点向量或节点序列称为均匀的;否则它是非均匀的。一般情况下,我们经常使用 u0 = 0和 um = 1,所以定义域是闭区间[0,1]。

基函数定义

为了定义B-样条基函数,我们还需要一个参数,基函数的次数(degree)p,第i个p次B-样条基函数,写为Ni,p(u),递归定义如下:

B-样条基函数定义

上述公式通常称为Cox-de Boor递归公式。
为了理解计算Ni,p(u)的方法,我们使用三角计算格式:

基函数计算格式

重要性质

  1. Ni,p(u)是一个在u上的p次多项式;
  2. 非负性,对于所有的i,p和u,Ni,p(u)是非负的;
  3. 局部支撑(Local Support),Ni,p(u)是在[ui,ui+p+1]上的非零多项式;
  4. 在任意区间[ui,ui+1),最多有p+1个p次基函数非零,即Ni-p,p(u),Ni-p+1,p(u),Ni-p+2,p(u),……,Ni,p(u);
  5. 单位分解(Partition of Unity),所有的非零的p次基函数在区间[ui,ui+1)上的和为1;
  6. 如果节点数是m+1,基函数的次数是p,而p次基函数的数目是n+1,则m=n+p+1;
  7. 基函数Ni,p(u)是p次多项式的复合曲线,连接点在[ui,ui+p+1]上的节点处;
  8. 在一个有重复度k的节点处,基函数Ni,p(u)是Cp-k连续的。

多重节点的影响

  1. 每个重复度 k 的节点减小最多k-1 个基函数的非零定义域;
  2. 在每个重复度k的内部节点,非零基函数的数目最多p - k + 1, 其中 p 是基函数的次数。

B-样条曲线

曲线类别

1.如果节点向量没有任何特别的结构,那么产生的曲线不会与控制折线(polyline)的第一边(leg)和最后一边(leg)接触,如下面左图所示。这种类型的B-样条曲线称为。
2.我们可能想强制曲线使得它分别与第一个控制点和最后一个控制点的第一边和最后一边相切,像贝塞尔曲线那样。为了做到这些,第一个节点和最后一个节点必须是重复度为p+1。这就产生了所谓的。参见下边中间的图。
3.通过重复某些节点和控制点,产生的曲线会是。这种情况,产生的曲线的开始和结尾连接在一起形成了一个闭环如下边右图所示。

B-样条曲线种类示意

开曲线

对于open(B-样条曲线),定义域是[up,um-p]
考虑一个由14个控制点(即,n = 13)定义的 6次 (即,p = 6) B-样条曲线。其节点的数目是 21 (即, m = n + p + 1 = 20)。如果节点向量是均匀的, 节点是0, 0.05, 0.10, 0.15, ..., 0.90, 0.95 和 1.0。 开(open)曲线定义在[up, um-p] = [u6, u14] = [0.3, 0.7]上且与第一边和最后一边不相切。下面上图显示了曲线而下图给出了B-样条基函数。

B-样条曲线

B-样条基函数

闭曲线

有许多方法来产生闭曲线。简单的一种就是或者wrapping控制点或者wrapping节点向量。

wrapping控制点

假设我们想构建一个p次闭(closed)B-样条曲线C(u),由n+1 控制点P0,P1, ..., Pn.定义。节点数目是m+1, 其中 m = n + p + 1. 这儿是构建过程:

  1. 设计一个均匀 m+1 个节点的节点序列:u0 = 0, u1 = 1/m, u1 = 2/m, ..., um = 1。注意曲线的定义域是 [up, um-p].
    2.Wrap头p 个和最后p 个控制点。更准确地,设P0 = Pn-p+1, P1=Pn-p+2, ..., Pp-2 = Pn-1 and Pp-1 = Pn. 如下图所示。
    closed-curve-1.jpg

    closed-curve-2.jpg

    closed-curve-3.jpg

    closed-curve-4.jpg

wrapping节点

假设我们想要构建一个由n+1个控制点P0, P1, ..., Pn定义的p次闭B-样条曲线C(u) 。构建过程如下:

  1. 增加一个新控制点 Pn+1 =P0.因此,控制点的数目是 n+2;
  2. 找到一个合适的有 n+1节点的节点序列u0, u1, ..., un 。这些节点不必要是均匀的,an advantage over the method discussed above
  3. 增加 p+2 个节点并 wrap 头 p+2个节点: un+1 = u0, un+2 = u1, ..., un+p = up-1, un+p+1 = up, un+p+2= up+1,如下图所示。这样,我们有n+p+2 = (n+1)+p+1 个节点;
  4. 定义在上述构建的 n+1个控制点和n+p+2 个节点上的 p次开B-样条曲线C(u)是一个闭曲线,在连接点处C(u0) = C(un+1)有Cp-1 连续性。注意闭曲线的定义域是 [u0, un+1]。
    Wrapping节点

重要性质

  1. B-样条曲线是个逐段曲线,每个分量是p次曲线;
  2. 等式m=n+p+1必须满足;
  3. Clamped B-样条曲线C(u)通过首尾两个控制点 P0Pn
  4. 样条曲线包含在控制折线(ployline)的凸包内。更特别地,如果u 在节点区间[ui,ui+1)里,那么C(u)在控制点Pi-p, Pi-p+1, ...,Pi的凸包里;
  5. Pi 只影响在区间[ui,ui+p+1)上的曲线 C(u);
  6. C(u) 在重复度 k 的节点上是Cp-k 连续的 ;
  7. 变分减小性质对B-样条曲线也成立。如果曲线在平面(resp., 空间)上,这意味着没有直线(resp., 平面) 与 B-样条曲线相交的次数多于它与曲线控制折线(polyline)相交的次数;
  8. 贝塞尔曲线是B-样条曲线的特例;
  9. 仿射不变性。

链接

本文旨在加深对B-样条曲线的理解,主要是对下述教程的总结,具体内容可以参考如下教程:
B-样条曲线教程

你可能感兴趣的:(B-样条曲线(B-spline Curve)总结)