B样条基函数的定义及系数的意义

原文链接:http://blog.csdn.net/tuqu/article/details/5177405

贝塞尔基函数用作权重。B-样条基函数也一样;但更复杂。但是它有两条贝塞尔基函数所没有的特性,即(1)定义域被节点细分(subdivided); (2) 基函数不是在整个区间非零。实际上,每个B样条基函数在附近一个子区间非零,因此,B-样条基函数相当“局部”。

U 是m + 1个非递减数的集合,u0 <= u2 <= u3 <= ... <= umui称为节点knots), 集合U 称为节点向量knot vector), 半开区间[uiui+1) 是第i个节点区间(knot span)。注意某些ui可能相等,某些节点区间会不存在。如果一个节点 ui 出现 k 次 (即,ui = ui+1 = ... = ui+k-1), 其中 k > 1, ui是一个重复度(multiplicity)为的多重节点,写为 ui(k)。 否则,如果ui只出现一次,它是一个简单节点。如果节点等间距(即, ui+1 - ui 是一个常数,对 0 <= i <= m - 1),节点向量或节点序列称为均匀的;否则它是非均匀的。

节点可认为是分隔点,将区间[u0um]细分为节点区间。所有B-样条基函数被假设定义域在[u0,um]上。在本文中,我们经常使用u0 = 0和um = 1,所以定义域是闭区间[0,1]。

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

上述公式通常称为Cox-de Boor递归公式。 这个定义看起来很复杂;但是不难理解。如果次数(degree)为零(即, p = 0),这些基函数都是阶梯函数,这也是第一个表达式所表明的。即,如果u是在第i个节点区间[uiui+1)上基函数Ni,0(u)是1。 例如,如果我们有四个节点u0 = 0, u1 = 1, u2= 2和 u3 = 3, 节点区间 0, 1 和2是[0,1), [1,2), [2,3),0次基函数是N0,0(u) = 1 在 [0,1) ,在其它区间是0;N1,0(u) = 1 在 [1,2)上,在其它区间是0;N2,0(u) = 1在[2,3)上,其它区间是0。如下图所示:

为了理解p大于0时计算Ni,p(u)的方法,我们使用三角计算格式。所有节点区间列在左边(第一)列,所有零次基函数在第二列。见下图。

为了计算Ni,1(u),需要Ni,0(u)和Ni+1,0(u)。因此,我们可以计算N0,1(u), N1,1(u),N2,1(u), N3,1(u) 等等。所有这些Ni,1(u)写在第三列。一旦所有Ni,1(u)计算完毕,我们可以计算Ni,2(u)并将其放在第四列。继续这个过程直到所有需要的Ni,p(u)的计算完毕。

上面我们获得了针对节点向量 U = { 0, 1, 2, 3 }的N0,0(u), N1,0(u)和N2,0(u) 。现在计算N0,1(u)和N1,1(u)。要计算N0,1(u),因为i = 0和p = 1,从定义出发有

因为u0 = 0, u1 = 1和u2 = 2,上式变为

因为N0,0(u)在[0,1)上非零且N1,0(u)在[1,2)上非零,如果u在[0,1)上 (resp., [1,2) ), 只有N0,0(u) (resp.N1,0(u) )对N0,1(u)有贡献。因此,如果u 在[0,1)上, N0,1(u) 是uN0,0(u) =u而如果u 在[1,2)上, N0,1(u)是 (2 - u)N1,0(u) = (2 - u)。相似的计算得到N1,1(u) = u - 1如果u 在[1,2)上, 而N1,1(u) = 3 - u 如果 u 在[2,3)上。下图中,黑色和红色线分别是N0,1(u)和  N1,1(u)。注意N0,1(u) (resp.N1,1(u))在[0,1) 和[1,2) 上(resp., [1,2) 和 [2,3))是非零的。

一旦获得N0,1(u)和N1,1(u),可以计算N0,2(u)。由定义得到下式:

代入节点值得到

注意 N0,1(u) 在 [0,1)和[1,2)上非零而N1,1(u) 在[1,2) 和 [2,3)上非零。因此,我们有三种情况要考虑:

1. u 在 [0,1)上:
    这种情况,只有N0,1(u)对N0,2(u)的值有贡献。因此,N0,1(u)是u, 得到

2. u 在[1,2)上: 
    这种情况, N0,1(u)和N1,1(u)都对 N0,2(u)有贡献。因此N0,1(u) = 2 - u 且N1,1(u) = u - 1在[1,2)上,得到

【译注:上式中间的式子的第二项应为:0.5(3-u)(u-1)】

3. u 在 [2,3)上: 
    这种情况,只有N1,1(u)对 N0,2(u)有贡献。因此N1,1(u) = 3 - u 在[2,3)上,得到,

如果我们画出上述三种情况的曲线段,我们会看到两个相邻曲线段连接起来形成了在节点上的曲线。更确切地,第一种和第二种情况的曲线段在u = 1处连接起来,而第二种和第三种情况的曲线段在u = 2处连接起来。注意合成曲线是光滑的,但是如果节点向量包含多重节点通常就不是这样的。

两个重要的观察

因为 Ni,1(u) 是从 Ni,0(u) 和 Ni+1,0(u)计算的而 因为Ni,0(u)和Ni+1,0(u) 在区间[uiui+1)和[ui+1ui+2)分别是非零的,Ni,1(u) 在这两个区间都是非零的。换句话说,Ni,1(u)在[ui,ui+2)上是非零的。相似地,因为 Ni,2(u) 依赖于Ni,1(u) 和Ni+1,1(u)且因为这两个基函数在[uiui+2)和[ui+1ui+3)分别是非零的,Ni,2(u)在[uiui+3)上非零。总之,为确定基函数Ni,p(u), 的非零定义域,可以追溯到三角计算格式直到回到第一列。例如,假设我们想找到 N1,3(u)的非零定义域。基于上述讨论,我们可从西北和西南方向追溯直到第一列为止,如下图中蓝色虚线所示。因此 N1,3(u)在 [u1u2), [u2u3), [u3u4) 和[u4u5)上是非零的。或,相等地,它在[u1u5)上非零。.

总之,我们有下列观察:

    基函数 Ni,p(u在[uiui+p+1)上非零。或,相等地,Ni,p(u在 p+1个节点区间[ui,ui+1), [ui+1ui+2), ..., [ui+pui+p+1)上非零。

接着,我们看相反的方向。给定一个节点区间[uiui+1),我们想知道哪个基函数会在计算中使用这个区间。我们可以以这个节点区间开始并画一个西北界限箭头和一个西南界限的箭头。所有封闭在楔形里的基函数使用 Ni,0(u)(为什么?)因此在该区间是非零的。因此,所有在[uiui+1)上非零的p 次基函数是这个楔形和包含所有Ni,p(u) 的列的交集。实际上,这一列和两个箭头形成一个等边三角形,而这一列是垂直边。 从 Ni,0(u)数到 Ni,p(u) 有p+1列。因此,等边三角形的垂直边至多有p+1 项,即 Ni,p(u), Ni-1,p(u),Ni-2,p(u), ..., Ni-p+2,p(u), Ni-p+1,p(u) 和Ni-p,p(u)。

让我们看上图。为了找到所有3次在 [u4u5) 上非零的基函数,画出两个箭头和所有在垂直边的函数是我们想要的。这个例子,是N1,3(u), N2,3(u), N3,3(u), 和N4,3(u).用黄色三角表示。蓝色 (resp., 红色) 三角显示的是在[u3u4) (resp., [u2u3) )上非零的3次基函数。注意在[u2u3)上只有3个3次基多项式。.

总之,我们观察到下列特性:

    在任何一个节点区间 [uiui+1), 最多有 p+1p 次基函数非零,即:Ni-p,p(u), Ni-p+1,p(u), Ni-p+2,p(u), ..., Ni-1,p(u和 Ni,p(u),

系数的意义是什么?

最后,让我们研究下Ni,p(u)定义中系数的意义。当计算 Ni,p(u) 时,它使用Ni,p-1(u)和Ni+1,p-1(u)。前者在 [uiui+p)上非零。如果u 是在这个半开区间,那么u - ui 是u 和这个区间左端之间的距离,区间长度是ui+p - ui, ,而(u - ui) / (ui+p - ui) 是上述距离的比且在0和1之间。见下图。第二项,Ni,p-1(u),在[ui+1ui+p+1)上非零。如果u 在该区间,那么ui+p+1u 是 u 到该区间右端的距离,ui+p+1 - ui+1 是区间长度,而(ui+p+1 - u) / (ui+p+1 - ui+1) 是这两个距离的比且值在0和1之间。因此, Ni,p(u) 是Ni,p-1(u) 和Ni+1,p-1(u)的线性组合,有两个系数,都在 u上是线性的,在0和1之间。

时间: 2024-08-04 04:14:00

B样条基函数的定义及系数的意义的相关文章

B-spline Curves 学习之B样条基函数计算实例(3)

B-spline Basis Functions: Computation Examples 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关的翻译学习. (原来博客网址:http://blog.csdn.net/tuqu/article/details/4749586) 原来的博主翻译还是很好的,所以前几章节直接借鉴参考原博主的内容. 1. 简单节点(Simple Knots ) 假设节点向量是U = { 0, 0.25, 0.5

B样条

在数学的子学科数值分析里,B-样条是样条曲线一种特殊的表示形式.它是B-样条基曲线的线性组合.B-样条是贝兹(贝塞尔)曲线的一种一般化,可以进一步推广为非均匀有理B样条(NURBS),使得我们能给更多一般的几何体建造精确的模型. 常数B样条 常数B样条是最简单的样条.只定义在一个节点距离上,而且不是节点的函数.它只是不同节点段(knot span)的标志函数(indicator function). 线性B样条 线性B样条定义在两个相邻的节点段上,在节点连续但不可微. 三次B样条 一个片断上的B

java 区块链中设计合理的难度系数

难度系数的概念 区块链的难度系数:是设计区块链挖矿难易的关键因子,难度系数越低,挖矿越容易.难度系数越高,相应越难.例如比特币的难度系数是18.难度系数一般是hash值的前置0的个数. java 区块链中设计合理的难度系数 例如难度系数定为6,也就是区块的有效hash,必须前面有6个0 例如难度系数为6的有效hash为:00000048bfdc5e67aa448686438f1350a6cc7f4477feb5562b0368a808fdef57 具体代码实现也很简单: /** * * 类名:B

(原创)c#学习笔记09--定义类01--c#中的类定义

第九章 定义类 本章内容: ●  如何在C#中定义类和接口 ●  如何使用控制可访问性和继承的关键字 ●  System.Object类及其在类定义中的作用 ●  如何使用VS和VCE提供的一些帮助工具 ●  如何定义类库 ●  接口和抽象类的异同 ●  结构类型的更多内容 ●  复制对象的一些重要信息 9.1  C#中的类定义 C#使用class关键字来定义类: class MyClass { // Class members. } 默认情况下,类声明为内部的,即只有当前项目中的代码才能访问它

为什么C++中声明和定义要分开写

现在开始写项目了,你会发现我们一般都要写一个cpp,对应的还得有一个h文件,那么为什么在C++中我们要这么做? .h就是声明,.cpp就是实现,而所谓分离式实现就是指"声明"和"定义"分别保存在不同的文件中,声明保存在.h文件.定义保存在.cpp文件中. 那么将声明和定义分离有什么意义吗? 首先从非分离式(声明的同时给出定义)看,其内容一般保存在.h文件中,以供多个源文件引用. 但是将定义放在头文件,那么当多个源文件使用#include命令包含此类的头文件便会在链接

OPEN CASCADE BSpline Curve Interpolation

OPEN CASCADE BSpline Curve Interpolation [email protected] Abstract. Global curve interpolation to point data is a way to construct curves. The paper focus on the interpolate algorithm in OPEN CASCADE, and give a simple example to demonstrate the usa

B样条曲线曲面

1 B样条曲线 1.1 B样条曲线方程 B样条方法具有表示与设计自由型曲线曲面的强大功能,是形状数学描述的主流方法之一,另外B样条方法是目前工业产品几何定义国际标准--有理B样条方法 (NURBS)的基础.B样条方法兼备了Bezier方法的一切优点,包括几何不变性,仿射不变性等等,同时克服了Bezier方法中由于整体表示带来不 具有局部性质的缺点(移动一个控制顶点将会影响整个曲线).B样条曲线方程可表示为 其中,di(i=0,1...n)为控制顶点(坐标),Ni,k(i=0,1...n)为k次规

004.曲线功能

 第3章 曲线功能 本章主要内容: ? 曲线功能简介 ? 绘制基本曲线 ? 绘制高级曲线 ? 曲线编辑 ? 曲线操作 3.1曲线功能简介UG软件主要是三维实体建模的,但曲线功能在其CAD模块中应用的非常广泛.有些实体需要通过曲线的拉伸.旋转等去操作构造特:也可以用曲线创建曲面进行复杂实体造型:在特征建模过程中,曲线也常用作建模的辅助线(如定位线等):另外,建立的曲线还可添加到草图中进行参数化设计.一般曲线的功能分两大部分,基本曲线的生成和曲线的编辑,图3-1所示的就是两种操作的工具条,同样也可以

Android中读取图片EXIF元数据之metadata-extractor的使用

一.引言及介绍 近期在开发中用到了metadata-extractor-xxx.jar 和 xmpcore-xxx.jar这个玩意, 索性查阅大量文章了解学习,来分享分享. 本身工作也是常常和处理大图片打交道,摸索摸索也是多多益善. 首先介绍一下什么是EXIF.EXIF是 Exchangeable Image File 的缩写,这是一种专门为数码相机照片设定的格式.这样的格式能够用来记录数字照片的属性信息,如相机的品牌及型号.相片的拍摄时间.拍摄时所设置的光圈大小.快门速度.ISO等信息.除此之