陳華偉,吳祿慎,袁小翠
(南昌大學(xué) 機(jī)電工程學(xué)院,江西 南昌330031)
非均勻有理B樣條 (non-uniform rational B-splines,NURBS)是適用于復(fù)雜曲線面造型的建模方法,在插值計(jì)算[1,2]、創(chuàng)新設(shè)計(jì)[3]和高精度曲面造型[4]中得到廣泛應(yīng)用。在CATIA 環(huán)境中進(jìn)行曲面功能二次開發(fā)[5],可以直接借助CATIA 成熟的顯示渲染功能,開發(fā)者只需關(guān)注功能實(shí)現(xiàn);且CATIA 具有完善的應(yīng)用接口 (API),支持NURBS曲面的讀取、編輯和創(chuàng)建,能夠?qū)訔l曲面擬合為NURBS 曲面,并提供了自定義曲面的生成功能。
NURBS曲線面由控制點(diǎn)、權(quán)因子和基函數(shù)共同表達(dá)的數(shù)學(xué)解析式定義,已知型值 (采樣)點(diǎn)和邊界條件,即可計(jì)算節(jié)點(diǎn)矢量,反求控制點(diǎn)陣,從而獲得解析解。
NURBS定義中,非均勻性 (non-uniform)指控制頂點(diǎn)的影響范圍可以改變,有理性 (rational)則說明NURBS曲面可以有理多項(xiàng)式形式定義,B 樣條 (B-spline)指曲線面的構(gòu)建是通過插值實(shí)現(xiàn)的。
u向p 階 (次)、v向q 階NURBS曲面定義[6]為
Pi,j為構(gòu)成曲面控制點(diǎn)網(wǎng),u向、v向維數(shù)分別為 (m+1)、(n+1);Wi,j為權(quán)因子;Ni,p(u)、Nj,q(v)為p 階、q階B樣條基函數(shù)。
同理,k次NURBS曲線的多項(xiàng)式定義為
為了生成NURBS曲面,CAD 軟件都會(huì)對(duì)NURBS 曲面進(jìn)行對(duì)象和參數(shù)化定義,幾個(gè)重要參數(shù)如下:
(1)自由度,階 (degree)
表示多項(xiàng)式的最高次數(shù)p,通常p=1,2,3或5,用于表達(dá)一次 (Linear)、二次 (Quadratic)、三次 (Cubic)或五次 (Quintic)曲線面。
(2)控制點(diǎn) (control points)
控制點(diǎn)的數(shù)目記為c,每個(gè)控制點(diǎn)均可附權(quán)重(weight),記為w。如果w 值完全相同,則成為 “非有理”(non-rational)。
(3)節(jié)點(diǎn)矢量 (knot)
節(jié)點(diǎn)矢量由一列數(shù)值組成,節(jié)點(diǎn)數(shù)值可以重復(fù),重復(fù)次數(shù)稱為重復(fù)度 (multiplicity),記為m;一般記不重復(fù)節(jié)點(diǎn)個(gè)數(shù)為k。節(jié)點(diǎn)必須滿足以下兩個(gè)基本條件:
1)非減性,節(jié)點(diǎn)數(shù)值按非降次序排列;
2)可重復(fù)性,重復(fù)度滿足m≤p。
例:p=3,c=11,Knot數(shù)值依次為:0、0、0、1、2、2、2、3、7、7、9、9、9,符合以上兩項(xiàng)原則。但是假設(shè)Knot數(shù)值為:0、0、0、1、2、2、2、2、7、7、9、9、9,則因?yàn)橛?個(gè)節(jié)點(diǎn)值為2,不符合原則2),因而是不合法節(jié)點(diǎn)矢量。
上述參數(shù)數(shù)組大小之間存在數(shù)量關(guān)系:c=k-p-1。以三次 (p=3)NURBS曲線插值為例,設(shè)已知型值點(diǎn)數(shù)目為n+1 (i=0,1,2,…,n),并取節(jié)點(diǎn)參數(shù)前后端0,1的重復(fù)個(gè)數(shù)為p,則節(jié)點(diǎn)數(shù)為:k= (n+1)+2×p=n+7,控制點(diǎn)數(shù)為:c=k-p-1=n+3。例如,當(dāng)型值點(diǎn)數(shù)n+1=6,即n=5時(shí),節(jié)點(diǎn)數(shù)k和控制點(diǎn)數(shù)c應(yīng)分別為12和8。
以下為兩個(gè)具體實(shí)例。圖1 (a)中,擬合曲線隨著其中一個(gè)控制點(diǎn)CP3位置的移動(dòng) (至CP3′)而變化,并被其“吸引”;圖1 (b)中,控制點(diǎn)CP1-CP6不變,改變權(quán)重系數(shù):原權(quán)重為 (1,1,1,1,1,1),新權(quán)重為 (1,1,10,20,5,1),可見曲線向權(quán)重較大的控制點(diǎn)CP3和CP4靠攏[7]。它們的主要參數(shù)列見表1。
圖1 兩個(gè)實(shí)例
表1 NURBS曲線參數(shù) (p=3)
曲面是封閉的R2至R3空間的函數(shù),由雙變參U、V的3個(gè)標(biāo)量函數(shù)FX、FY、FZ 所定義,標(biāo)量函數(shù)說明了曲面參數(shù) (U,V)到笛卡爾坐標(biāo) (X,Y,Z)的變換或映射關(guān)系。多面片曲面中每個(gè)面片中的點(diǎn)坐標(biāo)可由局部參數(shù)(u,v)或全局參數(shù) (U,V)定義。曲線則由單參數(shù)定義,情況類似。如圖2所示。
圖2 曲面的參數(shù)化定義
CATIA 幾何建模器 (CATIA geometric modeler,CGM)中封裝了CATCurve和CATSurface接口分別定義曲線和曲面對(duì)象,所定義曲線和曲面必須是二階可微,即C2連續(xù)的。與之相關(guān)聯(lián)的幾個(gè)重要對(duì)象和接口有:
(1)CATCrvParam/CATSurParam 對(duì)象:定義曲線/面上點(diǎn)的全局參數(shù);
(2)CATCrvLimits/CATSurLimits對(duì)象:定義曲線/面邊界,可由包圍盒的兩個(gè)角點(diǎn)CATCrvParam/CATSur-Param 參數(shù)定義;
(3)CATKnotVector對(duì)象:定義節(jié)點(diǎn)矢量,提供了獲取節(jié)點(diǎn)值,控制點(diǎn),分段弧數(shù),自由度,重合度等全套接口函數(shù);
(4)Eval接口:CATCurve/CATSurface::Eval實(shí)現(xiàn)參數(shù)坐標(biāo)至笛卡爾坐標(biāo)的轉(zhuǎn)換和三階導(dǎo)數(shù)的求取;
(5)GetParam 接口:CATCurve/CATSurface::Get-Param 實(shí)現(xiàn)笛卡爾坐標(biāo)至參數(shù)坐標(biāo)的轉(zhuǎn)換;
(6)GetEquation 接口:獲得曲線/面方程對(duì)象CATMathFunctionX/CATMathFunctionXY;
(7)GetKnotVector/GetKnotVectorU/V 接口:獲得CATKnotVector對(duì)象。
(1)點(diǎn)對(duì)象信息
曲線面分別利用CATCurve和CATSurface對(duì)象的接口函數(shù)求取曲線面上的點(diǎn)及其導(dǎo)數(shù)。如曲線中點(diǎn)及該點(diǎn)切向和法向的計(jì)算過程如下:
對(duì)如圖3 (a)所示的曲線進(jìn)行計(jì)算,結(jié)果為:
中點(diǎn)坐標(biāo):(262.734,114.157,209.558):
一階導(dǎo)數(shù):(0.779724,-0.558819,-0.358627);
二階導(dǎo)數(shù):(-0.00640612,-0.00114124,-0.00163766);
三階導(dǎo)數(shù): (-9.6987e-005,7.44916e-005,-2.68162e-005)。
可見,三階導(dǎo)數(shù)的取值已經(jīng)非常之小,幾何意義不大。也可以采用第二種方法,即使用接口函數(shù)CATCurve::GetEquation獲得該曲線的MathFunctionX 數(shù)學(xué)函數(shù)對(duì)象,該對(duì)象也提供了Eval類接口函數(shù),所求結(jié)果與上述結(jié)果一致。
曲面上點(diǎn)信息的讀取過程與之類似,圖3 (b)顯示了曲面中點(diǎn)及其各向切矢和法矢的計(jì)算結(jié)果。
圖3 CATIA 中曲線的底層操作
(2)點(diǎn)的解析解
此外,還能讀取通過CATKnotVector::GetPolynomialBasisForOneArc接口函數(shù)讀取NURBS多項(xiàng)式,并對(duì)曲線面上的點(diǎn)求解析解。以曲線為例:
解析解計(jì)算結(jié)果與對(duì)象法讀取的結(jié)果一致。
(3)NURBS參數(shù)
為了讀取NURBS參數(shù),應(yīng)使用CATCreateCrvFitting-ToNurbsCrv全局函數(shù) (可設(shè)置擬合誤差)將一般曲線轉(zhuǎn)化為NURBS 曲線對(duì)象CATNurbsCurve,該對(duì)象由CATCurve繼承而來,增加了GetOneControlPoint函數(shù)用于讀取控制點(diǎn)信息。
下面給出NURBS節(jié)點(diǎn)和控制點(diǎn)參數(shù)的讀取過程:
對(duì)如圖3 (a)所示的曲線進(jìn)行計(jì)算,結(jié)果為:
自由度:5
分段弧數(shù):3
節(jié)點(diǎn)數(shù):4
節(jié)點(diǎn)值:0,106.771,254.757,459.452
重復(fù)度:6,3,3,6,
控制點(diǎn)數(shù):12
控制點(diǎn): (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)
將這些控制點(diǎn)用直線連接,結(jié)果顯示于圖3 (a);圖3(b)中也展示了NURBS曲面參數(shù)求解后獲得的部分控制點(diǎn)和兩條控制線。
工程應(yīng)用中,一般已知型值點(diǎn)陣Qi,j(Qi,j∈S),要求NURBS的解析表達(dá)式,因此,需要反求控制點(diǎn)陣P,設(shè)Q為型值點(diǎn)陣列,R 為基函數(shù)系數(shù)矩陣,P 為控制點(diǎn)網(wǎng)矩陣,則NURBS曲面方程定義式可表示為矩陣形式
基函數(shù)系數(shù)矩陣R 由多項(xiàng)式函數(shù)Ni,k(k 為階次)構(gòu)成,Ni,k的基函數(shù)又由節(jié)點(diǎn)矢量u= [u0,…,um+2p],v=[v0,…,vn+2q]采用Cox-De Boor公式[2,8]遞推
其中
對(duì)矩陣方程進(jìn)行求解,可反求出控制點(diǎn):
P=R-1Q,R 為方陣;
P= (RTR)-1RTQ,R 不為方陣。
NURBS曲面反求以曲線反求為基礎(chǔ),而曲線反求的核心是控制點(diǎn)的反求,其基本步驟是:
(1)讀入型值點(diǎn)Q,計(jì)算節(jié)點(diǎn)矢量u、v;
(2)使用De-Boor公式,計(jì)算多項(xiàng)式基函數(shù)Ni,k,構(gòu)造系數(shù)矩陣R;
(3)帶入曲線方程,構(gòu)造方程組RP=Q;
(4)附加合適的邊界條件,得到未知數(shù)個(gè)數(shù)與方程個(gè)數(shù)一致的可解方程組;
(5)采用合適的方法求解方程組,得到控制點(diǎn)P。
NURBS曲線反求可描述為:已知n個(gè)型值點(diǎn)Qi(i=1,…,n),曲線自由度為k,求控制點(diǎn)Pi。
為滿足曲線端點(diǎn)就是型值點(diǎn)的要求,節(jié)點(diǎn)矢量的兩端應(yīng)取k+1重復(fù)度,即u0=u1=…=uk,un+k=un+k+1=…=un+2k。
對(duì)三次樣條曲線 (k=3),取規(guī)范化節(jié)點(diǎn)矢量,則兩端重復(fù)節(jié)點(diǎn)矢量為:u0=u1=u2=u3=0,un+3=un+4=un+5=un+6=1。
首末短短重復(fù)度為m=k+1=4。
其它節(jié)點(diǎn)值可采用累積弦長(zhǎng)法進(jìn)行參數(shù)化
附加以下條件:
(1)首末端點(diǎn)應(yīng)分別與控制點(diǎn)重合,即:p0=q0,pn+k-1=qn。
(2)邊界條件。一般要求邊界點(diǎn) (首末端點(diǎn))切矢q0′和qn′連續(xù),即有
使用基函數(shù)遞推式 (2),求系數(shù)矩陣R,帶入式 (1),整理得以下矩陣方程
其中
方程組 (1)為典型的三對(duì)角矩陣方程,易采用高斯消去法求解。
給定形的矩陣方程如下
經(jīng)過n-1次消元,可化為同解上三角矩陣方程
其中
回代求出未知數(shù):xn=gn,xi=qi-uixi+1(i=n-1,n-2,…,1)。
該過程亦稱為追趕法,是三對(duì)角方程組的典型求解方法。
以均勻雙三次B樣條(k=3)為例,典型的反求問題可描述為:已知m×n維型值點(diǎn)陣Qi,j(i=1,2,…,n;j=1,2,…,m),求控制點(diǎn)陣Pi,j(i=1,2,…,n+1;j=1,2,…,m+1)。
采用兩次反求法,即分別對(duì)u 向和v 向控制點(diǎn)進(jìn)行反求,即可求取控制點(diǎn)陣:
(1)計(jì)算u向控制點(diǎn)。對(duì)u 向的m 組型值點(diǎn),按照反算公式,并添加邊界條件,即可求解矩陣方程,獲得m 組B樣條曲線的控制頂點(diǎn)Vi,j(i=1,2,…,n,n+1;j=1,2,…,m)。因?yàn)槊織l曲線都要添加兩個(gè)邊界條件才能求解,因而每條曲線上的控制點(diǎn)數(shù)為 (n+1);
(2)計(jì)算v向控制點(diǎn)。將Vi,j視為v 向的m 組型值點(diǎn),再作 (n+1)次B樣條曲線反算,所求v向控制點(diǎn)Pi,j即為整個(gè)曲面的控制點(diǎn)。
CATIA 提供了幾何對(duì)象包CATGeoFactory,開放有NURBS曲線面生成的接口函數(shù)CATCreateNurbsCurve和CATCreateNurbsSurface,它們均以節(jié)點(diǎn)向量和控制點(diǎn)陣為主要輸入?yún)?shù),調(diào)用結(jié)果是生成CATNurbsCurve或CATNurbsSurface對(duì)象,該對(duì)象可直接在CATIA 界面中顯示。
使用CATIA 開發(fā)環(huán)境,導(dǎo)入型值點(diǎn)陣,自定義函數(shù)封裝節(jié)點(diǎn)計(jì)算、控制點(diǎn)反求及其求解算法,然后調(diào)用CATGeoFactory:: CATCreateNurbsCurve/CATCreateNurbs-Surface接口生成NURBS 曲線面對(duì)象,轉(zhuǎn)化為特征后在CATIA 界面中顯示。圖4是在CATIA 中對(duì)30×20維點(diǎn)陣進(jìn)行NURBS曲面重構(gòu)的結(jié)果。
圖4 由點(diǎn)陣生成NURBS曲面
特征在界面上以對(duì)象形式存在,在底層則是通過幾何拓?fù)浠蚪馕鲇?jì)算生成。文中NURBS曲線面信息的讀取以及曲線面的反向生成,均借助CATIA 的NURBS對(duì)象接口實(shí)現(xiàn),并交由顯示渲染接口生成,因而具有流程簡(jiǎn)單,代碼清晰,可維護(hù)性和封裝性強(qiáng)等特點(diǎn)。作為曲線面建模和逆向建模的核心算法,該模塊可在復(fù)雜曲線和型面[9,10]建模分析中直接應(yīng)用或修改后應(yīng)用。
[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). [王允森,蓋榮麗,孫一蘭,等.面向高質(zhì)量加工的NURBS曲線插補(bǔ)算法 [J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)報(bào),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).[王國(guó)勛,舒啟林,王軍,等.NURBS直接插補(bǔ)技術(shù)中快速求值求導(dǎo)算法 [J].東北大學(xué)學(xué)報(bào) (自然科學(xué)版),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ī)設(shè)計(jì)和分析中的應(yīng)用 [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). [李衛(wèi)國(guó),黃風(fēng)玲.NURBS曲面重構(gòu)方法在板料模面修型中的應(yīng)用 [J].計(jì)算機(jī)應(yīng)用與軟件,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 的飛行器參數(shù)化三維外形設(shè)計(jì)及三維重建 [D].南京:南京航空航天大學(xué),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). [陳軍,崔漢國(guó).基于權(quán)值的NURBS曲線形狀修改 [J].海軍工程大學(xué)學(xué)報(bào),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).[陳岳坪,高健,鄧海祥,等.復(fù)雜曲面零件在線檢測(cè)與誤差補(bǔ)償方法 [J].機(jī)械工程學(xué)報(bào),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).[李媛,王義文,劉獻(xiàn)禮,等.基于NURBS的半開式整體葉輪智能建模 [J].哈爾濱理工大學(xué)學(xué)報(bào),2014,19(1):12-15.]