Posted on 2013-03-12 20:48
eryar 阅读(1436)
评论(1)
编辑
收藏
引用 所属分类:
OpenCASCADE 、
CAGD
B样条曲线库BSplCLib提供了一些基本几何算法:
l B样条基函数及其导数的计算BSplCLib::EvalBsplineBasis();
l 节点插入BSplCLib::InsertKnot();
l 节点去除BSplCLib::RemoveKnot();
l 升阶BSplCLib::IncreaseDegree();
l 降阶;
结合《The NURBS Book》和Open Cascade中的BSplCLib的源程序,可以高效的学习NURBS。《The NURBS Book》中有详细的理论推导及算法描述,而Open Cascade中有可以用来实际使用的程序。理论联系实际,有助于快速理解NURBS的有关概念及其应用。
三、 OCC中B样条曲线库的节点和重数Knots and Multiplicity in BSplCLib
由B样条曲线的可微性可知,节点的重数与B样条曲线的连续性相关。在节点区间内部,Ni,p(u)是无限次可微的,因在每个节点区间内部,它是一个多项式。在节点处Ni,p(u)是p-k次连续的,其中k是节点的重复度(multiplicity,有时也称为重数)。因此,增加次数p将提高曲线的连续性,而增加节点的重复度则使连续性降低。
重复度(multiplicity,有时也称为重数)有两种不同的理解方式:
l 节点在节点矢量中的重复度;
l 节点相对于一个特定的基函数的重复度;
在Open Cascade中对重复度的理解是前者,即节点在节点矢量中的重复度。下面结合源程序来进行说明。
函数BSplCLib::Knots()用来将给定的节点矢量(节点序列knot sequence)转换为节点的重复度不大于1的Knots数组和每个节点对应的重复度Mults数组,且数据Knots和Mults的长度必由函数BSplCLib::KnotsLength()得到。Knots()函数的源程序如下所示:
当导数次数DerivativeRequest大于B样条基的阶数Order时,将计算导数的次数设置为B样条基的次数(Order-1)。程序代码如下所示: