吳麗娟, 張心慈, 任海清, 梁岱立, 黃 堯, 齊維毅
(沈陽師范大學(xué) 物理科學(xué)與技術(shù)學(xué)院, 沈陽 110034)
B樣條的概念最初是由Schoenberg于20世紀(jì)40年代中提出來的[1-4],60年代末70年代初,Riesenfeld,Coons和Clark等的論著取得了最初的成果;其后10年間,各國學(xué)者如Wu,Abel和Greenberg,朱心雄和吳瑞祥等也發(fā)表了論文與著作[5-7],對B樣條方法進行了更為廣泛的研究。
當(dāng)用B樣條曲面構(gòu)造i階(i=1,2,…,n)連續(xù)的4邊曲面或N邊曲面時,要求被插值的跨界導(dǎo)矢之間必須滿足一定的約束條件,跨界導(dǎo)矢不能獨立地給出,約束條件難以滿足[8-10],而Coons曲面是由已知的邊界曲線生成的。
因此,我們將Coons曲面的構(gòu)造原理與B樣條曲線相結(jié)合,構(gòu)造了一種新的曲面,稱為Coons類混合B樣條曲面,簡稱CNSBS曲面。本文根據(jù)邊界曲線和跨界導(dǎo)矢構(gòu)造過渡的CNSBS曲面。結(jié)果顯示,該曲面與周邊B樣條曲面處處C1連續(xù)。
1) B樣條曲線方程定義為
(1)
圖1 B樣條曲線Fig.1 B-spline curve
式中:Pi是B樣條曲線的控制頂點;Ni,p(t)是定義在節(jié)點空間上的p次B樣條基函數(shù)。根據(jù)控制頂點生成的B樣條曲線如圖1所示。
2) 由B樣條曲線的定義,可得到B樣條曲面的定義如下:
(2)
定義中Pi,j(i=0,1,…,n;j=0,1,…,m)是B樣條曲面的控制頂點;Ni,p(u)和Nj,q(v)是B樣條基函數(shù)。構(gòu)建的B樣條曲面如圖2所示。
圖2 B樣條曲面Fig.2 B-spline surface
已知Coons曲面的4條邊界曲線分別為P(u,0),P(u,1),P(0,w)和P(1,w),曲面的4個角點分別為P(0,0),P(0,1),P(1,0)和P(1,1)[11]。則插值這4條邊界的Coons曲面的表達式為
Q(u,w)=Q1(u,w)+Q2(u,w)-Q3(u,w)
(3)
式中
(4)
給定控制點,生成4片待拼接的B樣條曲面;根據(jù)邊界曲線上的型值點,運用反算算法求出控制點,生成4條邊界曲線,并求出其跨界導(dǎo)矢;運用節(jié)點插入算法,求出待生成曲面上的控制頂點;根據(jù)求出的控制頂點和基函數(shù)生成2個B樣條曲面,并求出表達式;將2張曲面合并成1張曲面,得到拼接后的過渡CNSBS曲面。
2.2.1 構(gòu)建邊界曲線
已知型值點Pi(i=1,2,…,n),求出控制點Vj(j=1,2,…,n+1,n+2)[12]。具體過程如下:
3次均勻B樣條曲線的矩陣形式為
(5)
根據(jù)(5)式可以列出n個求解B樣條曲線控制點的方程組:
(6)
因為所求的控制點個數(shù)為(n+2),所以要再補充2個端點條件:
首端切矢
(7)
末端切矢
(8)
求解(6)式~(8)式即可得到全部待求控制點Vj。
根據(jù)(1)式B樣條曲線定義可得邊界曲線:
(9)
2.2.2 求跨界導(dǎo)矢
要使過渡曲面與待拼接曲面處處C1連續(xù),關(guān)鍵是對邊界B樣條曲線的基函數(shù)求導(dǎo):
(10)
因此可以得到邊界曲線的跨界導(dǎo)矢:
(11)
2.2.3 插入節(jié)點
設(shè)k次B樣條曲線的控制頂點為P=[P0,P1,…,Pn],在節(jié)點區(qū)間[ui,ui+1]內(nèi)插入節(jié)點u。
根據(jù)節(jié)點插入算法:
(12)
其中k=3,r為所插入節(jié)點的重復(fù)度,令r=0;由此可以求出插值于邊界曲線的過渡曲面的控制頂點Pij和Qij[13-14]。
2.2.4 構(gòu)建B樣條曲面
(13)
(14)
式中:Bi,3(u)(Bj,3(v)),Bj,2n+1(v)Bi,2n+1(u)是B樣條基函數(shù);Pij(i=0,1,…,N,j=0,1,…,2n+1)Qij(i=0,1,…,2n+1,j=0,1,…,M)是B樣條曲面P(u,v)Q(u,v)的控制頂點;(N+1)(或(M+1))是控制頂點數(shù)[15]。
2.2.5 構(gòu)造拼接曲面
將2張B樣條曲面合并成1張CNSBS曲面,由于2張曲面不能直接相加,需要求出2片曲面所占權(quán)重,并滿足約束條件:
(15)
根據(jù)Coons曲面的生成原理,得到插值于4條邊界線及其跨界導(dǎo)矢的CNSBS曲面的表達式為
(16)
式中a(u,v)=un+1(1-u)n+1,b(u,v)=vn+1(1-v)n+1,(1-u),u,(1-w)和w都是Coons曲面的線性函數(shù)。
得到的待拼接曲面和拼接后的曲面如圖3和圖4所示。
圖3 待拼接的B樣條曲面Fig.3 B-spline surfaces to be spliced
圖4 拼接后的曲面Fig.4 Surface after splicing
通過上述算法設(shè)計與實現(xiàn)過程可知,根據(jù)4條邊界曲線及其跨界導(dǎo)矢構(gòu)造過渡曲面的方法,拼接得更加精準(zhǔn),運用C++語言和OpenGL函數(shù)進行編程操作,在Visual Studio 2010平臺上進行調(diào)試,最終生成的CNSBS曲面整體C1連續(xù)。運用此方法拼接的曲面無需滿足跨界導(dǎo)矢之間的約束條件,并且同樣具有B樣條曲面的性質(zhì),可以實現(xiàn)曲面形狀的控制。