李博 吳麗娟 韓松 焦興強(qiáng) 吉登清
摘 要:本文重點(diǎn)介紹了B樣條曲面的基本概念、性質(zhì)和分類,主要研究B樣條曲面的基本原理和構(gòu)建算法的實(shí)現(xiàn),通過對B樣條基函數(shù)進(jìn)行詳細(xì)研究,引入兩個參數(shù)后,能更加靈活地調(diào)整曲線。最后,基于OpenGL生成兩片均勻B樣條曲面,并給出了運(yùn)行結(jié)果。
關(guān)鍵詞:B樣條曲線;B樣條曲面;曲面構(gòu)建
中圖分類號:TP391.7 文獻(xiàn)標(biāo)識碼:A 文章編號:1003-5168(2019)02-0014-03
Design and Implementation of B-spline Surface Construction Algorithm
LI Bo1 WU Lijuan1 HAN Song1 JIAO Xingqiang1 JI Dengqing2
(1.Shenyang Normal University,Shenyang Liaoning 110034;2.Wuyi University,Jiangmen Guangdong 529030)
Abstract: This paper focused on the basic concept, properties and classification of B-spline surface. It mainly studied the basic principle of B-spline surface and the realization of its construction algorithm. Through the detailed study of B-spline basis function, the curve could be adjusted more flexibly by introducing two parameters. Finally, two uniform B-spline surfaces were generated based on OpenGL, and the running results were given.
Keywords: B-spline curve;B-spline surface;surface construction
目前,人們的生產(chǎn)和生活越來越受到計(jì)算機(jī)圖形學(xué)的影響,計(jì)算機(jī)圖形學(xué)不斷影響每一個使用計(jì)算機(jī)的人。計(jì)算機(jī)輔助幾何設(shè)計(jì)(CAGD)是一種伴著船舶、汽車、飛機(jī)等現(xiàn)代制造工業(yè)而興起的應(yīng)用學(xué)科,其與計(jì)算機(jī)圖形學(xué)有著密不可分的聯(lián)系。計(jì)算機(jī)圖形學(xué)中較常用的曲線曲面有插值曲線曲面、Bezier曲線曲面、B樣條曲線曲面和非均勻有理樣條曲線曲面等。B樣條曲線曲面有著良好的局部性質(zhì),因此,在工程設(shè)計(jì)中得到了越來越廣泛的應(yīng)用[1-5]。
1 B樣條曲線曲面
1.1 B樣條曲線的優(yōu)點(diǎn)
Bezier曲線具有諸多優(yōu)越性,但也存在不足:①特征多邊形頂點(diǎn)數(shù)決定了其階次數(shù),當(dāng)[n]較大時,不僅計(jì)算量增大,穩(wěn)定性降低,而且控制頂點(diǎn)對曲線的形狀控制減弱;②不具有局部性,即修改一控制點(diǎn)對曲線產(chǎn)生全局性影響。
1972年,Gordon等用B樣條基代替Bernstein基函數(shù),從而改進(jìn)上述缺點(diǎn)。首先,B樣條曲線比Bezier曲線更貼近控制多邊形,且更光滑,其基函數(shù)的多項(xiàng)式次數(shù)可根據(jù)需要給定。其次,B樣條曲線能對曲線進(jìn)行局部修改,由于B樣條曲線是分段構(gòu)成的,所以控制多邊形的頂點(diǎn)對曲線的控制靈活而直觀。修改某一控制點(diǎn)只會引起與該控制點(diǎn)相鄰近的曲線形狀發(fā)生變化,遠(yuǎn)處的曲線形狀不受影響,這使得B樣條廣泛應(yīng)用于交互式自由曲線曲面的設(shè)計(jì)[6-10]。
1.2 B樣條曲線的定義
B樣條曲線定義如下:
[P(t)=i=0nPiNi(t),tmin≤t≤tmax,2≤k≤n+1] ? ? ? ? ?(1)
其中,[Pi]是控制多邊形的頂點(diǎn)集;[i]是大于0的整數(shù),是B樣條的序號;[k]表示B樣條的冪次;[Pi]是B樣條曲線的[n+1]個控制頂點(diǎn)的頂點(diǎn)集。將各個控制頂點(diǎn)順序連線形成的折線圖形稱為控制多邊形。[Ni,k(t)]是定義在節(jié)點(diǎn)矢量[T]上的[k]次B樣條基函數(shù),用[Ni,k(t)]表示第[i]個[k]次([k+1])階B樣條基函數(shù),是由節(jié)點(diǎn)矢量的參數(shù)序列[T:t0≤t1≤...≤ti+k+1]所決定的[k-1]次分段多項(xiàng)式樣條。參數(shù)[t]的取值構(gòu)成一個非遞減的參數(shù)序列[T],被稱為節(jié)點(diǎn)向量。任意一個控制點(diǎn)最多只能影響[k]段曲線的形狀。
1.3 B樣條曲面的定義
B樣條曲面由B樣條曲線拼接而成,是通過兩個方向的控制頂點(diǎn)網(wǎng)格、兩個節(jié)點(diǎn)矢量和單變量的B樣條基函數(shù)的乘積來定義。一塊[m×n]次張量積B樣條曲面片,其方程為:
[Pu,v=i=0mj=0nPijNi,puNj,qv] ? ? ? ? ? ?(2)
其中,節(jié)點(diǎn)矢量[u]中含有[m+1]個節(jié)點(diǎn),節(jié)點(diǎn)矢量[v]中含有[n+1]個節(jié)點(diǎn),此時就構(gòu)成一張控制網(wǎng)格,稱為B樣條曲面的特征網(wǎng)格。[Ni,pu]和[Nj,qv]是節(jié)點(diǎn)向量[u]和[v]按de Boor-Cox遞推公式?jīng)Q定的B樣條混合函數(shù)。
1.4 B樣條曲面的性質(zhì)
①嚴(yán)格的凸包性。如果[Pt]位于控制頂點(diǎn)所建立的凸包內(nèi),曲線嚴(yán)格位于控制多邊形的凸包內(nèi)(見圖1)。
②分段參數(shù)多項(xiàng)式。[Pt]在每個區(qū)間上都是次數(shù)不高于[k-1]次的多項(xiàng)式。
③可微性與連續(xù)性。[Pt]在每一曲線段內(nèi)部是無限可微的,在定義域內(nèi)重復(fù)度為[k]的節(jié)點(diǎn)處,則使[p-k]次可微或具有[p-k]階參數(shù)連續(xù)性。
④幾何不變性。B樣條曲線的形狀和位置與坐標(biāo)系的選取無關(guān)。
⑤局部可調(diào)性。如果改變某個控制頂點(diǎn)的位置,只會影響那個頂點(diǎn)所對應(yīng)的曲線段,對其他部分曲線沒有影響;同理,如果想改變某一段曲線的形狀,只需要改變對應(yīng)的控制頂點(diǎn),與其他頂點(diǎn)無關(guān)。
⑥近似性。在控制頂點(diǎn)不共線的情況下,當(dāng)次數(shù)越高時,這組控制頂點(diǎn)所對應(yīng)的B樣條曲線越光滑。
1.5 曲面的分類
B樣條曲面由一系列曲線拼接而成,在分類上同樣按照節(jié)點(diǎn)矢量分為三類:均勻B樣條曲面、準(zhǔn)均勻B樣條曲面和非均勻B樣條曲面。
①均勻B樣條曲面,節(jié)點(diǎn)矢量[u,v]滿足條件:
[Δui=ui+1-ui=const>0,i=k,...,m+k] ? ? ? ? ? ? ? ? ?(1)
[Δvj=vj+1-vj=const>0,j=1,...,n+l] ? ? ? ? ? ? ? ? (2)
②準(zhǔn)均勻B樣條曲線,節(jié)點(diǎn)矢量[u,v]滿足條件:
[u0=...=uk,um+1=...=um+k+1,Δui=ui+1-ui=const>0,i=k,...,m] ? ? ? ? (3)
[v0=...=v1,vn+1=vn+j+1,Δvj=vj+1-vj=const>0,j=1,...,n] ? ? ? ? ?(4)
③非均勻B樣條曲面。對于這種類型的B樣條曲面,只要節(jié)點(diǎn)矢量滿足以下條件即可:節(jié)點(diǎn)序列非遞減;兩端節(jié)點(diǎn)的重?cái)?shù)小于等于次數(shù)+1,內(nèi)節(jié)點(diǎn)的重?cái)?shù)小于等于次數(shù)。
2 B樣條曲面的構(gòu)建
2.1 算法設(shè)計(jì)
三次B樣條曲面是由三次B樣條曲線拓廣而來,以兩組正交的三次B樣條曲線控制點(diǎn)構(gòu)造空間網(wǎng)格來生成曲面。給定了36個控制點(diǎn),通過給定的控制點(diǎn)生成一個6×6的網(wǎng)格,對B樣條曲面基函數(shù)進(jìn)行算法設(shè)計(jì),分別從[u]向和[v]向進(jìn)行賦值,讓控制點(diǎn)與基函數(shù)相乘求和,從而生成對應(yīng)的型值點(diǎn),連接型值點(diǎn),通過編程進(jìn)行循環(huán)操作,進(jìn)而生成B樣條曲面。
2.2 算法實(shí)現(xiàn)
[k×l]階B樣條曲面[Pt,s]定義為:
[Pt,s=i=0nj=0mPijNi,ktNj,ts] ? ? ? ? ? ? ? ? ? ? ? ?[tk-1≤t≤tn+1,st-1≤s≤st+1] ? ? ? ? ? ? ? ? ? ? ? ? (5)
其中,[Pij0≤i≤n,0≤j≤m]為控制頂點(diǎn),[Ni,kt]和[Nj,ts]分別為[k]階和[l]階B樣條基函數(shù)。節(jié)點(diǎn)向量為[T1]和[T4],[T4]:[0,0,...,0t,st,...,sm,1,...,1t]。
設(shè)在t方向上擴(kuò)展曲面[P(t,s)]到[m+1]目標(biāo)點(diǎn)[Pn+1,j,j=0,1,...m]。設(shè)[P(t,s)]中沿t方向的[m+1]條B樣條曲線為:
[Pjt=i=0nPijNikt,j=0,1...,m] ? ? ? ? ? ? ? ? (6)
設(shè)與[Pjt]相應(yīng)的第[j]條擴(kuò)展曲線為[Qjt],與[Qjt]相應(yīng)[a]為[aj],則與目標(biāo)點(diǎn)[Pn+1j(j=0,1,...m)]相應(yīng)的節(jié)點(diǎn)值為所有[a(j=0,1,...m)]的加權(quán)平均,即
[u=1+1m+1j=0maj] ? ? ? ? ? ? ? ? ? ? ? ? ?(7)
三次B樣條曲線的矩陣表達(dá)式:
[Pt=t3t2t1?16?-13-313-630-30301410?P0P1P2P3=T?MB?MG] ? ? ? ? ?(8)
其中,[MB]為三次B樣條曲線的系數(shù)矩陣,[MG]為幾何矩陣,為四個控制點(diǎn)的位置矢量。三次B樣條曲面時由三次B樣條曲線拓廣而來,以兩組正交的三次B樣條曲線控制點(diǎn)構(gòu)造空間網(wǎng)格來生成曲面。依次用線段連接點(diǎn)列[Pi,ji=0,1,2,3;j=0,1,2,3]中相鄰兩點(diǎn)所形成的空間網(wǎng)格稱為控制網(wǎng)格。三次B樣條曲面的定義為:
[Pu,v=i=03j=03pijNi,3uNj,3v],[u,v∈0,1×0,1] ? ? ? (9)
[Pu,v=N0,3(u)N1,3(u)N2,3(u)N3,3(u)?P0,0P0,1P0,2P0,3P1,0P1,0P1,2P1,3P2,0P2,0P2,2P2,3P3,0P3,0P3,2P3,3?N0,3(v)N1,3(v)N2,3(v)N3,3(v)] ? ? ? ? ? ?(10)
其中,[N0,3u],[N1,3u],[N2,3u],[N3,3u],[N0,3v],[N1,3v],[N2,3v],[N3,3v]是三次B樣條基函數(shù)。
[N0,3u=16-u3+3u2-3u+1N1,3u=163u3-6u2+4N2,3u=16-3u3+3u2+3u+1N3,3u=16u3], ? ? ? ? ? ? ? ? ? ?[N0,3v=16-v3+3v2-3v+1N1,3v=163v3-6v2+4N2,3v=16-3v3+3v2+3v+1N3,3v=16v3] ? ? ? ? ? ? ? (11)
將式(10)代入式(11)得:
[Pu,v=136?u3u2u1?-13-313-630-30301410?P0,0P0,1P0,2P0,3P1,0P1,1P1,2P1,3P2,0P2,1P2,2P2,3P3,0P3,1P3,2P3,3?-13-313-604-33311000?v3v2v1] (12)
三次B樣條曲面的矩陣表示為
[Pu,v=U?Mb?P?MTb?VT] ? ? ? ? ? ? (13)
其中:
[U=u3u2u1] ? ? ? ? ? ? ? ? ? ? ? (14)
[V=v3v2v1] ? ? ? ? ? ? ? ? ? ? ? ?(15)
[Mb=16?-13-313-630-30301410] ? ? ? ? ? ? ? ? ? (16)
[P=P0,0P0,1P0,2P0,3P1,0P1,1P1,2P1,3P2,0P1,2P2,2P2,3P3,0P1,3P3,2P3,3] ? ? ? ? ? ? ? ? ?(17)
2.3 運(yùn)行結(jié)果分析
三次B樣條曲面是由三次B樣條曲線交織而成。曲面生成時可以先固定[u],變化[v]得到一簇三次B樣條曲線;然后固定[v],變化[u]得到另一簇三次B樣條曲線。與三次B樣條曲線相似,雙三次B樣條曲面一般情況下不通過控制網(wǎng)格的任何頂點(diǎn)。
3 結(jié)論
本文就B樣條曲線、曲面的定義、性質(zhì)、分類以及算法等相關(guān)知識進(jìn)行了全面系統(tǒng)的介紹,基于B樣條曲面方程,通過計(jì)算B樣條曲線的節(jié)點(diǎn)矢量以及B樣條基函數(shù)等,能夠得到曲面上的任意一點(diǎn)并生成B樣條曲面。
參考文獻(xiàn):
[1]郭懷天.B樣條曲線及曲面研究[D].合肥:合肥工業(yè)大學(xué),2012.
[2]吳學(xué)毅.計(jì)算機(jī)圖形學(xué)原理與實(shí)踐[M].北京:印刷工業(yè)出版社,2008.
[3]傅雅寧.計(jì)算機(jī)圖形學(xué)教程[M].北京:國防工業(yè)出版社,2005.
[4]梁錫坤.B樣條曲線曲面理論及其應(yīng)用研究[D].合肥:合肥工業(yè)大學(xué),2003.
[5]孫家廣,胡事民.計(jì)算機(jī)圖形學(xué)基礎(chǔ)教程[M].北京:清華大學(xué)出版社,2005.
[6]孔正興,周良,鄭宏源.計(jì)算機(jī)圖形學(xué)基礎(chǔ)教程[M].北京:清華大學(xué)出版社,2003.
[7]王洪艷.B樣條曲線曲面造型研究[D].哈爾濱:哈爾濱理工大學(xué),2010.
[8]K. Waters. A Muscle Model for Animating Three Dimensional Facial Expression[J] .Computer Graphics(SIGGRAPH’87),1987(4):17-24.
[9]楊曉靜.B樣條曲面構(gòu)造方法的研究與實(shí)現(xiàn)[D].北京:北京工業(yè)大學(xué),2003.
[10]何芳.移動曲面擬合法在復(fù)雜曲面造型中的研究與應(yīng)用[D].武漢:武漢理工大學(xué),2008.