陈华伟,吴禄慎,袁小翠
(南昌大学 机电工程学院,江西 南昌330031)
非均匀有理B样条 (non-uniform rational B-splines,NURBS)是适用于复杂曲线面造型的建模方法,在插值计算[1,2]、创新设计[3]和高精度曲面造型[4]中得到广泛应用。在CATIA 环境中进行曲面功能二次开发[5],可以直接借助CATIA 成熟的显示渲染功能,开发者只需关注功能实现;且CATIA 具有完善的应用接口 (API),支持NURBS曲面的读取、编辑和创建,能够将样条曲面拟合为NURBS 曲面,并提供了自定义曲面的生成功能。
NURBS曲线面由控制点、权因子和基函数共同表达的数学解析式定义,已知型值 (采样)点和边界条件,即可计算节点矢量,反求控制点阵,从而获得解析解。
NURBS定义中,非均匀性 (non-uniform)指控制顶点的影响范围可以改变,有理性 (rational)则说明NURBS曲面可以有理多项式形式定义,B 样条 (B-spline)指曲线面的构建是通过插值实现的。
u向p 阶 (次)、v向q 阶NURBS曲面定义[6]为
Pi,j为构成曲面控制点网,u向、v向维数分别为 (m+1)、(n+1);Wi,j为权因子;Ni,p(u)、Nj,q(v)为p 阶、q阶B样条基函数。
同理,k次NURBS曲线的多项式定义为
为了生成NURBS曲面,CAD 软件都会对NURBS 曲面进行对象和参数化定义,几个重要参数如下:
(1)自由度,阶 (degree)
表示多项式的最高次数p,通常p=1,2,3或5,用于表达一次 (Linear)、二次 (Quadratic)、三次 (Cubic)或五次 (Quintic)曲线面。
(2)控制点 (control points)
控制点的数目记为c,每个控制点均可附权重(weight),记为w。如果w 值完全相同,则成为 “非有理”(non-rational)。
(3)节点矢量 (knot)
节点矢量由一列数值组成,节点数值可以重复,重复次数称为重复度 (multiplicity),记为m;一般记不重复节点个数为k。节点必须满足以下两个基本条件:
1)非减性,节点数值按非降次序排列;
2)可重复性,重复度满足m≤p。
例:p=3,c=11,Knot数值依次为:0、0、0、1、2、2、2、3、7、7、9、9、9,符合以上两项原则。但是假设Knot数值为:0、0、0、1、2、2、2、2、7、7、9、9、9,则因为有4个节点值为2,不符合原则2),因而是不合法节点矢量。
上述参数数组大小之间存在数量关系:c=k-p-1。以三次 (p=3)NURBS曲线插值为例,设已知型值点数目为n+1 (i=0,1,2,…,n),并取节点参数前后端0,1的重复个数为p,则节点数为:k= (n+1)+2×p=n+7,控制点数为:c=k-p-1=n+3。例如,当型值点数n+1=6,即n=5时,节点数k和控制点数c应分别为12和8。
以下为两个具体实例。图1 (a)中,拟合曲线随着其中一个控制点CP3位置的移动 (至CP3′)而变化,并被其“吸引”;图1 (b)中,控制点CP1-CP6不变,改变权重系数:原权重为 (1,1,1,1,1,1),新权重为 (1,1,10,20,5,1),可见曲线向权重较大的控制点CP3和CP4靠拢[7]。它们的主要参数列见表1。
图1 两个实例
表1 NURBS曲线参数 (p=3)
曲面是封闭的R2至R3空间的函数,由双变参U、V的3个标量函数FX、FY、FZ 所定义,标量函数说明了曲面参数 (U,V)到笛卡尔坐标 (X,Y,Z)的变换或映射关系。多面片曲面中每个面片中的点坐标可由局部参数(u,v)或全局参数 (U,V)定义。曲线则由单参数定义,情况类似。如图2所示。
图2 曲面的参数化定义
CATIA 几何建模器 (CATIA geometric modeler,CGM)中封装了CATCurve和CATSurface接口分别定义曲线和曲面对象,所定义曲线和曲面必须是二阶可微,即C2连续的。与之相关联的几个重要对象和接口有:
(1)CATCrvParam/CATSurParam 对象:定义曲线/面上点的全局参数;
(2)CATCrvLimits/CATSurLimits对象:定义曲线/面边界,可由包围盒的两个角点CATCrvParam/CATSur-Param 参数定义;
(3)CATKnotVector对象:定义节点矢量,提供了获取节点值,控制点,分段弧数,自由度,重合度等全套接口函数;
(4)Eval接口:CATCurve/CATSurface::Eval实现参数坐标至笛卡尔坐标的转换和三阶导数的求取;
(5)GetParam 接口:CATCurve/CATSurface::Get-Param 实现笛卡尔坐标至参数坐标的转换;
(6)GetEquation 接口:获得曲线/面方程对象CATMathFunctionX/CATMathFunctionXY;
(7)GetKnotVector/GetKnotVectorU/V 接口:获得CATKnotVector对象。
(1)点对象信息
曲线面分别利用CATCurve和CATSurface对象的接口函数求取曲线面上的点及其导数。如曲线中点及该点切向和法向的计算过程如下:
对如图3 (a)所示的曲线进行计算,结果为:
中点坐标:(262.734,114.157,209.558):
一阶导数:(0.779724,-0.558819,-0.358627);
二阶导数:(-0.00640612,-0.00114124,-0.00163766);
三阶导数: (-9.6987e-005,7.44916e-005,-2.68162e-005)。
可见,三阶导数的取值已经非常之小,几何意义不大。也可以采用第二种方法,即使用接口函数CATCurve::GetEquation获得该曲线的MathFunctionX 数学函数对象,该对象也提供了Eval类接口函数,所求结果与上述结果一致。
曲面上点信息的读取过程与之类似,图3 (b)显示了曲面中点及其各向切矢和法矢的计算结果。
图3 CATIA 中曲线的底层操作
(2)点的解析解
此外,还能读取通过CATKnotVector::GetPolynomialBasisForOneArc接口函数读取NURBS多项式,并对曲线面上的点求解析解。以曲线为例:
解析解计算结果与对象法读取的结果一致。
(3)NURBS参数
为了读取NURBS参数,应使用CATCreateCrvFitting-ToNurbsCrv全局函数 (可设置拟合误差)将一般曲线转化为NURBS 曲线对象CATNurbsCurve,该对象由CATCurve继承而来,增加了GetOneControlPoint函数用于读取控制点信息。
下面给出NURBS节点和控制点参数的读取过程:
对如图3 (a)所示的曲线进行计算,结果为:
自由度:5
分段弧数:3
节点数:4
节点值:0,106.771,254.757,459.452
重复度:6,3,3,6,
控制点数:12
控制点: (100,70,300) (102.004,99.0517,287.637)(108.124,121.486,276.488)
(118.362,137.304,266.554) (152.613,159.256,245.748)(203.535,148.733,229.986)
(235.575,134.094,221.656) (299.801,92.7058,198.798)(310.217,54.9492,161.893)
(286.537,43.1674,132.534) (233.131,41.5177,95.2366)(150,50,50)
将这些控制点用直线连接,结果显示于图3 (a);图3(b)中也展示了NURBS曲面参数求解后获得的部分控制点和两条控制线。
工程应用中,一般已知型值点阵Qi,j(Qi,j∈S),要求NURBS的解析表达式,因此,需要反求控制点阵P,设Q为型值点阵列,R 为基函数系数矩阵,P 为控制点网矩阵,则NURBS曲面方程定义式可表示为矩阵形式
基函数系数矩阵R 由多项式函数Ni,k(k 为阶次)构成,Ni,k的基函数又由节点矢量u= [u0,…,um+2p],v=[v0,…,vn+2q]采用Cox-De Boor公式[2,8]递推
其中
对矩阵方程进行求解,可反求出控制点:
P=R-1Q,R 为方阵;
P= (RTR)-1RTQ,R 不为方阵。
NURBS曲面反求以曲线反求为基础,而曲线反求的核心是控制点的反求,其基本步骤是:
(1)读入型值点Q,计算节点矢量u、v;
(2)使用De-Boor公式,计算多项式基函数Ni,k,构造系数矩阵R;
(3)带入曲线方程,构造方程组RP=Q;
(4)附加合适的边界条件,得到未知数个数与方程个数一致的可解方程组;
(5)采用合适的方法求解方程组,得到控制点P。
NURBS曲线反求可描述为:已知n个型值点Qi(i=1,…,n),曲线自由度为k,求控制点Pi。
为满足曲线端点就是型值点的要求,节点矢量的两端应取k+1重复度,即u0=u1=…=uk,un+k=un+k+1=…=un+2k。
对三次样条曲线 (k=3),取规范化节点矢量,则两端重复节点矢量为:u0=u1=u2=u3=0,un+3=un+4=un+5=un+6=1。
首末短短重复度为m=k+1=4。
其它节点值可采用累积弦长法进行参数化
附加以下条件:
(1)首末端点应分别与控制点重合,即:p0=q0,pn+k-1=qn。
(2)边界条件。一般要求边界点 (首末端点)切矢q0′和qn′连续,即有
使用基函数递推式 (2),求系数矩阵R,带入式 (1),整理得以下矩阵方程
其中
方程组 (1)为典型的三对角矩阵方程,易采用高斯消去法求解。
给定形的矩阵方程如下
经过n-1次消元,可化为同解上三角矩阵方程
其中
回代求出未知数:xn=gn,xi=qi-uixi+1(i=n-1,n-2,…,1)。
该过程亦称为追赶法,是三对角方程组的典型求解方法。
以均匀双三次B样条(k=3)为例,典型的反求问题可描述为:已知m×n维型值点阵Qi,j(i=1,2,…,n;j=1,2,…,m),求控制点阵Pi,j(i=1,2,…,n+1;j=1,2,…,m+1)。
采用两次反求法,即分别对u 向和v 向控制点进行反求,即可求取控制点阵:
(1)计算u向控制点。对u 向的m 组型值点,按照反算公式,并添加边界条件,即可求解矩阵方程,获得m 组B样条曲线的控制顶点Vi,j(i=1,2,…,n,n+1;j=1,2,…,m)。因为每条曲线都要添加两个边界条件才能求解,因而每条曲线上的控制点数为 (n+1);
(2)计算v向控制点。将Vi,j视为v 向的m 组型值点,再作 (n+1)次B样条曲线反算,所求v向控制点Pi,j即为整个曲面的控制点。
CATIA 提供了几何对象包CATGeoFactory,开放有NURBS曲线面生成的接口函数CATCreateNurbsCurve和CATCreateNurbsSurface,它们均以节点向量和控制点阵为主要输入参数,调用结果是生成CATNurbsCurve或CATNurbsSurface对象,该对象可直接在CATIA 界面中显示。
使用CATIA 开发环境,导入型值点阵,自定义函数封装节点计算、控制点反求及其求解算法,然后调用CATGeoFactory:: CATCreateNurbsCurve/CATCreateNurbs-Surface接口生成NURBS 曲线面对象,转化为特征后在CATIA 界面中显示。图4是在CATIA 中对30×20维点阵进行NURBS曲面重构的结果。
图4 由点阵生成NURBS曲面
特征在界面上以对象形式存在,在底层则是通过几何拓扑或解析计算生成。文中NURBS曲线面信息的读取以及曲线面的反向生成,均借助CATIA 的NURBS对象接口实现,并交由显示渲染接口生成,因而具有流程简单,代码清晰,可维护性和封装性强等特点。作为曲线面建模和逆向建模的核心算法,该模块可在复杂曲线和型面[9,10]建模分析中直接应用或修改后应用。
[1]WANG Yunsen,GAI Rongli,SUN Yilan,et al.NURBS interpolation algorithm for high-quanlity machining [J].Journal of Computer-Aided Design & Computer Graphics,2013,25(10):1549-1556 (in Chinese). [王允森,盖荣丽,孙一兰,等.面向高质量加工的NURBS曲线插补算法 [J].计算机辅助设计与图形学报,2013,25 (10):1549-1556.]
[2]WANG Guoxun,SHU Qilin,WANG Jun,et al.Algorithm of fast evaluation and derivation for the technique of NURBS direct interpolation [J].Journal of Northeastern University(Natural Science),2012,33 (7):1021-1024 (in Chinese).[王国勋,舒启林,王军,等.NURBS直接插补技术中快速求值求导算法 [J].东北大学学报 (自然科学版),2012,33(7):1021-1024.]
[3]ZHOU Wei,CHENG Dewen,XU Chen,et al.Application of NURBS free-form surface in optomechanical design [J].Infrared and Laser Engineering,2014,43 (10):3313-3320 (in Chinese).[周伟,程德文,许晨,等.NURBS自由曲面在光机设计和分析中的应用 [J].红外与激光工程,2014,43(10):3313-3320.]
[4]LI Weiguo,HUANG Fengling.Application of NURBS surface reconstruction algorithm in form modification of sheets die faces[J].Computer Applications and Software,2014,31 (10):281-284 (in Chinese). [李卫国,黄风玲.NURBS曲面重构方法在板料模面修型中的应用 [J].计算机应用与软件,2014,31 (10):281-284.]
[5]WANG Liming.Three-dimensional reconstruction and parametric design of aircraft configuration based on CATIA CAA[D].Nanjing:Nanjing University of Aeronautics and Astronautics,2014 (in Chinese). [王黎明.基于CATIA CAA 的飞行器参数化三维外形设计及三维重建 [D].南京:南京航空航天大学,2014.]
[6]Piegl L,Tiller W.Curve and surface constructions using rational B-splines[J].Computer-Aided Design,1987,19 (9):485-498.
[7]CHEN Jun,CUI Hanguo.Shape modification of NURBS curves based on weight[J].Journal of Naval University of Engineering,2012,24 (4):108-112 (in Chinese). [陈军,崔汉国.基于权值的NURBS曲线形状修改 [J].海军工程大学学报,2012,24 (4):108-112.]
[8]Carl de Boor.On calculation with B-spline[J].Journal of Approximation Theory,1972,6 (1):50-62.
[9]CHEN Yueping,GAO Jian,DENG Haixiang,et al.On-line inspection and machining error cmpensation for complex surfaces[J].Journal of Mechanical Engineering,2012,48 (23):143-151 (in Chinese).[陈岳坪,高健,邓海祥,等.复杂曲面零件在线检测与误差补偿方法 [J].机械工程学报,2012,48(23):143-151.]
[10]LI Yuan,WANG Yiwen,LIU Xianli,et al.Intelligent modeling of semi-open integral wheel based on nurbs[J].Journal of Harbin University of Science and Technology,2014,19 (1):12-15 (in Chinese).[李媛,王义文,刘献礼,等.基于NURBS的半开式整体叶轮智能建模 [J].哈尔滨理工大学学报,2014,19(1):12-15.]