劉志平,曾燕璋
(淮海工學(xué)院 理學(xué)院,江蘇 連云港 222005)
在計(jì)算機(jī)圖形學(xué)和計(jì)算機(jī)輔助幾何設(shè)計(jì)領(lǐng)域,經(jīng)常會(huì)用到四邊貝齊爾曲面和三角貝齊爾曲面,在一些實(shí)用的計(jì)算機(jī)圖形系統(tǒng)中,兩種形式的曲面會(huì)同時(shí)存在.究其原因,是因?yàn)橐话悻F(xiàn)實(shí)問(wèn)題的參數(shù)域通常是復(fù)雜形狀,而對(duì)復(fù)雜形狀的處理方法一般是將參數(shù)域剖分為小的三角形或者四邊形,因此這就需要研究三角貝齊爾曲面和四邊貝齊爾曲面的繪制方法.四邊貝齊爾曲面實(shí)際上是兩個(gè)方向的貝齊爾曲線做張量積,容易用矩陣形式表示,繪制方法相對(duì)容易.而三角貝齊爾曲面本身不具備矩陣的表示形式,繪制方法要比四邊貝齊爾曲面困難,因此研究三角貝齊爾曲面的繪制方法就更有價(jià)值.
首先給四邊貝齊爾曲面和三角貝齊爾曲面的定義,兩種形式的貝齊爾曲面都是由控制頂點(diǎn)唯一確定的.
定義1[1]給定(n+1)×(m+1)個(gè)控制頂點(diǎn)Pi,j,i=0,1,2,…,n; j=0,1,2,…,m,n×m次四邊貝齊爾曲面定義為
定義2[1]給定個(gè)控制頂點(diǎn)Pi,j,ki=0,1,…n; j=0,1,…n-i; k=n-i-j,n次三角貝齊爾曲面定義為
當(dāng)參數(shù)域是四邊形時(shí),采用四邊貝齊爾曲面,為了方便程序?qū)崿F(xiàn),公式(1)經(jīng)常表示成矩陣乘積的形式[2]
其中UT=[1 u u2… un],VT=[1 v v2… vm],M是從伯恩斯坦基到多項(xiàng)式基的轉(zhuǎn)換矩陣,P是控制頂點(diǎn)陣.
當(dāng)參數(shù)域?yàn)槿切蔚臅r(shí)候,一般采用三角貝齊爾曲面形式.比較常見(jiàn)的三角貝齊爾曲面繪制方法是把三角形看成退化的四邊形,即四邊形的一條邊退化為一個(gè)點(diǎn),這樣三角貝齊爾曲面就變成有一條退化邊的四邊貝齊爾曲面[3].具體來(lái)說(shuō),如果原來(lái)的三角貝齊爾曲面的控制頂點(diǎn)為
為了將其表示為四邊貝齊爾曲面,上述控制頂點(diǎn)要修改為
即添加了很多重復(fù)的控制頂點(diǎn),但是從繪制結(jié)果來(lái)看,這種繪制方法并不理想,如圖1所示,圖形的右下角很多條線匯聚在一起,形成數(shù)據(jù)冗余,影響繪制效果.
圖1 將三角貝齊爾曲面看成退化的四邊貝齊爾曲面
為了解決數(shù)據(jù)冗余的問(wèn)題,三角貝齊爾曲面也可以采用Delauny三角剖分形式進(jìn)行繪制,Delauny剖分的缺點(diǎn)是數(shù)據(jù)結(jié)構(gòu)復(fù)雜,不容易理解.那么,有沒(méi)有一種簡(jiǎn)單的三角貝齊爾曲面繪制方法呢?仔細(xì)考慮四邊貝齊爾曲面的繪制過(guò)程,發(fā)現(xiàn)雖然有四條邊,但其實(shí)質(zhì)是兩個(gè)不同方向的貝齊爾曲線進(jìn)行交叉.三角貝齊爾曲面沒(méi)有辦法看成兩個(gè)方向的交叉,那么它能否看成是三個(gè)方向的貝齊爾曲線進(jìn)行交叉?基于這樣的想法,在本文中,采用了一種新的三角貝齊爾曲面繪制方法,將三角貝齊爾曲面看成是三簇貝齊爾曲線的交叉,即u-向貝齊爾曲線,v-向貝齊爾曲線和w-向貝齊爾曲線的交叉.如圖2所示,繪制過(guò)程中的難點(diǎn)是點(diǎn)的連接關(guān)系,下面將詳細(xì)介紹具體的繪制過(guò)程.
圖2 三角貝齊爾曲面參數(shù)域示意圖
圖2所示的三角貝齊爾曲面是3次的,現(xiàn)實(shí)問(wèn)題里,可能需要考慮繪制任意次數(shù)的貝齊爾曲面.假定次數(shù)為n,可以看到,第一行有1個(gè)控制頂點(diǎn),第二行有2個(gè),……,如此類推.因?yàn)閚次三角貝齊爾曲面共有n+1行控制頂點(diǎn),所以總的控制頂點(diǎn)個(gè)數(shù)為將控制頂點(diǎn)按行進(jìn)行存儲(chǔ),即P0,n,0的存儲(chǔ)序號(hào)為1,P0,n-1,1的存儲(chǔ)序號(hào)為2,P1,n-1,0的存儲(chǔ)序號(hào)為3,…….由等差數(shù)列的性質(zhì)可得,第i 行的存儲(chǔ)序號(hào)為由此可以得到三簇貝齊爾曲線的連接關(guān)系.
首先,考慮u-向的第i 行貝齊爾曲線,其控制頂點(diǎn)的存儲(chǔ)序號(hào)為
其次,考慮v-向貝齊爾曲線,最右邊的v-向貝齊爾曲線其控制頂點(diǎn)的存儲(chǔ)序號(hào)為
從右上方往左下方進(jìn)行,每進(jìn)行一次,去掉最左邊的存儲(chǔ)序號(hào),其它序號(hào)各自減1,即第2條v-向貝齊爾控制頂點(diǎn)的存儲(chǔ)序號(hào)為第3條控制頂點(diǎn)的存儲(chǔ)序號(hào)為最后一條v-向貝齊爾的存儲(chǔ)序號(hào)為
最后考慮w-向貝齊爾曲線,最左邊的w-向貝齊爾曲線其控制頂點(diǎn)的存儲(chǔ)序號(hào)為從左上方往右下方進(jìn)行,每進(jìn)行一次,去掉最左邊的存儲(chǔ)序號(hào),其它序號(hào)各自加1,即第2 條w-向貝齊爾曲線的存儲(chǔ)序號(hào)為第3 條的存儲(chǔ)序號(hào)為最后一條w-向貝齊爾曲線的存儲(chǔ)序號(hào)為
有了點(diǎn)的連接關(guān)系,就可以使用畫折線函數(shù)分別繪制三簇不同方向的貝齊爾曲線,它們?cè)龠M(jìn)行交叉就會(huì)得到最終的三角貝齊爾曲面.本文中,使用MATLAB軟件采用上面的方法進(jìn)行了繪制,繪制結(jié)果如圖3和圖4所示.圖3和圖4是同一個(gè)曲面從兩個(gè)不同方向觀察到的結(jié)果,從中可以清晰地看到,已經(jīng)不存在數(shù)據(jù)冗余,繪制效果良好.
圖3 采用本文方法繪制的三角貝齊爾曲面
圖4 從不同角度觀察圖3的結(jié)果
本文根據(jù)三角貝齊爾曲面自身的特點(diǎn),采用三個(gè)不同方向的貝齊爾曲線交叉形成曲面.與已有的繪制方法相比,比傳統(tǒng)方法數(shù)據(jù)冗余少,繪制效果好.此外,本文的方法比采用Delauny三角剖分方法更容易理解.
[1]施法中.計(jì)算機(jī)輔助幾何設(shè)計(jì)和非均勻有理B樣條[M].北京:高等教育出版社,2001.
[2]FARIN G.Curves and Surface for CAGD:A Practical Guide[M].San Diego:Academic Press,2002.
[3]HU Shi-min.Conversion between triangluar and rectangular Bezier patches [J].Computer Aided Geometry Desigin,2001,18(7):667-671.