NURBS是非均匀有理B样条的简称,NURBS是现在通用CAD软件中比较高级的建模方法,B样条在创建曲线或曲面时有很高的灵活性,会用并善用基本上能获得想要的任意“自然”、光滑的曲线。
OpenCasCade是国外一款开源的CAD建模引擎,功能比较完备、强大。现在OpenCasCade母公司也以提供基于OpenCasCade的定制化CAD软件和服务为主要业务。
B样条曲线的分类
B样条曲线是B样条基曲线的线性组合。其分类包括均匀B样条、准均匀B样条、分段Bezier曲线和非均匀有理B样条曲线。在OpenCasCade中以同样的9个控制点和次数(2次)绘制对应的曲线。
1. 均匀B样条曲线
均匀B样条的节点值向量均匀分布,并且基函数呈周期性,即所有的基函数都有相同的形状。
2. 准均匀B样条曲线
与均匀B样条的区别在于两端点具有重复度,如果样条曲线的次数为k,则如果要过端点,则需要将重复度设为k+1。
3. 分段Bezier曲线
分段Bezier曲线结合了Bezier曲线和B样条曲线的优点,即可以分段控制,又可以采用Bezier曲线的简单算法。分段Bezier曲线在插值圆弧时有很好的准确性。
4. 非均匀有理B样条曲线
非均匀有理B样条曲线可以通过部分节点的权因子来控制曲线的局部的形状,某点的权因子越大,越靠近该点。在OCC中,与上述三种不同的是,在构造有理B样条时额外需要一个权因子列表,实际上,分段Bezier曲线也可以传入一个权因子列表来修改曲线局部的形状。
在OCC中,上述三种曲线的构造及显式对应的代码如下:
TColgp_Array1OfPnt Poles(1,9);
Poles.SetValue(1, gp_Pnt(0,-100,0));
Poles.SetValue(2, gp_Pnt(0,-100,50));
Poles.SetValue(3, gp_Pnt(0,-50,50));
Poles.SetValue(4, gp_Pnt(0,0,50));
Poles.SetValue(5, gp_Pnt(