Knot Vectors

在前面的章节中,我提到过节点矢量有两种类型:open和periodic。还分为均匀的和非均匀的。我将对此进和详细讲解,并推出它们所表示的基函数。我只给出k次基函数,当然你也可以根据需要推导出低次基函数。本节中的每张图片都是由本章程序所产生的。在本章的结尾,我将会对显示任意次数的基函数进行解释。

Open节点矢量推导出的基函数跟上节中的基函数很像,所以就以此开始吧。

准均匀节点矢量 Open Knot Vectors

准均匀节点矢量的节点序列中两端节点具有重复度k,剩余的其它节点序列可以是均匀也可以是非均匀的。举例如下:

k = 3 [X] = [0 0 0 1 2 3 3 3] (uniform)

k = 4 [X] = [0 0 0 0 1 1 1 1] (uniform)

k = 3 [X] = [0 0 0 1 1 2 2 2] (nonuniform)

k = 2 [X] = [0 0 1 2 3 3 3 4 5 6 6] (nonuniform)

节点矢量端部的重复值是为确保曲线上的首未两点与第一个和最后一个控制顶点对应。他们的作用就是把曲线的端部拉到控制多边形的端部。这是由于重复的节点矢量值可以把曲线的首未点值限制。也可确保端部的斜率等于控制多边形首未侧的斜率。这样以来,端部条件和Bezier曲线一样,就便于曲线的拼接。

在上一节点,我说过Bezier曲线就是B样条曲线的节点矢量为准均匀时的特例。你若要通过四个控制顶点,并且节点矢量的端部条件由准均匀节点矢量确定来定义一个三次B样条曲线,其实这就是Bezier曲线。B样条曲线的优势在于你可用多个控制顶点并且保证端部条件,还可以设置曲线的次数。如有10个控制顶点的Bezier曲线将会推导出一个9次曲线。相应的B样条曲线的节点矢量为:[X] = [0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1]。有10个控制顶点和B样条曲线若用如下的节点矢量可能会推导出一个三次曲线。[X] = [0 0 0 0 1 2 3 4 5 6 6 6 6]

有几个优点:你可以控制曲线的次数;也有更多的局部修改功能。图4.8所示为k=10的Bezier曲线和k=4的B样条曲线。观察一下局部修改的能力:

Knot Vectors

选择使用准均匀节点矢量的主要原因是可以把曲线的端点限制在控制多边形的端点上。这在曲线拼接时特别有用,但是这也是把双刃剑。图4.9所示为绘制图4.8的B样条曲线的基函数的图形。如图所示,每个基函数有点不同。

Knot Vectors

周期性节点矢量 Periodic Knot Vectors

在第二章的“三角函数”中,我引入了周期函数,像正弦函数和余弦函数。这些函数是周期性因为每个周期的波形都可以认为是相同的波形在重复。若可以由节点矢量推导出周期性的基函数,则节点矢量也是周期性的。如下为均匀周期节点矢量(k=4, N=10)可推出周期性的基函数如图4.10所示。

[X] = [1 2 3 4 5 6 7 8 9 10 11 12 13 14]

Knot Vectors

周期性的节点矢量也不一定是均匀的。如图4.11所示为由非均匀节点矢量(k=4, N=10)推导出的周期性基函数。尽管在图4.11中可能很难看出,每个基函数都是一样的,只是偏移了,只能看到它的部分。

Knot Vectors

上一篇:弯管参数计算及编程实现


下一篇:The Building Blocks of a B-Spline