曲线数学NURBS之B样条曲线

上一篇博客已经讲到了bezier曲线,本篇接着讲解B样条曲线。
B样条曲线是bezier曲线的更一般化,bezier曲线是B样条曲线的特列。相比于Bezier曲线,B样条曲线是分段组成的,每一段参数的区间都是[0,1],这就克服了Bezier曲线改变任意一个控制点,曲线上所有的点都要改变的缺点。
B样条曲线的数学公式如下:

其中di(i=0,1…n)为控制点,K为规定的基函数的次数,Ni,k(i=0,1…n)即为k次B样条基函数,最高次数为k。u表示参数序列,即B样条分段函数中的参数。
B样条基函数的公式如下:

其中i为节点序号,k是基函数的次数,规定:0/0等于0。这就是Cox-deBoor算法公式。
节点和控制点是不一样的,满足控制关系m+1=n+k+2.即假如有3个控制点控制的2次B样条曲线,其节点的数量为3+2+2=7.Boehm给出了节点的插入公式:

其中r是新插入的节点t在节点序列中的重复度。

如上图,控制点Pj生成新的控制点Pj’。
B样条曲线总的分为均匀和非均匀的。

根据如上的讲解为了设计一个B-样条曲线,我们需要一系列的控制点,一系列的节点和一系列的系数,每个系数对应一个控制点,所有曲线段连接在一起满足某个连续条件,即为B样条曲线。
有了上边整体的了解,接着从B样条基函数开始讲起,如何根据几个控制点,以及给定的B样条基函数次数k画出B样条曲线。

如上图,基函数的系数定义如图中所述,可以看出,每一个系数范围都为(0,1)区间。而基函数中的 Ni,k(u) 可以表示为如下的杨辉三角形状,比如求第1段区间1次基函数 N1,1 就要求出 N1,0 和 N2,0, 其他依次类推。

如下三图为本人从基函数推导出来的B样条曲线。其中控制点个数为3(n=2),基函数最高次数为2(k=2),则节点总数为m+1=n+k+2=6.推导中,为了便于计算,各个节点赋值分别为0,1,2,3,4,5。

最后得出B样条曲线的每一段的函数表示。通常情况下,对于开B样条曲线的定义域规定为[up,um-p],所以上述推导的区段只有(2,3)区间才有意义,即得到控制点的‘full support‘。

B样条曲线有三种类型:

当起始点和终止点的重复度为最高次数加1是,开B样条变为Clamped B样条,当起始点和终止点重合且重复度为p+1时为闭B样条曲线。如上图的clamped有 n+1个控制点(n=9)以及 p = 3. 。那么,, m 必须是13 所以节点向量有14个节点。为了有clamped效果,前p+1 = 4 和最后4个节点必须一样。其余14 - (4 + 4) = 6 个节点可在定义域任何位置。实际上,曲线是用节点向量 U = { 0, 0, 0, 0, 0.14, 0.28, 0.42, 0.57, 0.71, 0.85, 1, 1, 1, 1 }产生的。


本文内容为本人通过网上各种博客查阅理解,加上本人推导完成,欢迎随时交流。最后附B样条基础知识博客链接链接,这篇译文对我有很大的帮助,感谢博主的分享!

(0)

相关推荐