張書華 馬蘇奇
摘 要:Bezier樣條作為曲線曲面造型技術的一個重要分支被廣泛運用于CAD/CAM技術。以MATLAB為程序平臺,以Bezier樣條為理論基礎,首先設計出繪制曲線曲面的程序算法,進而通過算法編寫出可實際操作的程序,最后用實例進行驗證。其中更實現了對曲線的擬合以及將設計得到的曲面數據輸入逆向工程軟件imageware,從而達到利用造型成果其進行更加復雜的造型構造的目的。
關鍵詞:Bezier樣條;MATLAB;imageware
Bezier曲線起源于20世紀60年代晚期,著名的法國數學家皮耶爾·Bezier運用數學方法為雷諾公司的汽車制造業研究出一種矢量繪制曲線的方法。這種方法的巧妙之處在于它是利用控制矢量點位置的變動從而改變曲線的形態。現代設計師大部分都是在計算機上進行設計,而在過去并沒有發明手寫板的時候,設計師們很難用鼠標繪制理想的曲線。Bezier樣條的出現大大改變了這種困境,讓設計師們通過輸入控制點坐標,從而很容易地得到所需要的曲線。
MATLAB是美國MathWorks公司出品的一款商業數學軟件,主要包括MATLAB和Simulink兩大部分,是一種編程語言和數值計算環境。和其他數學類科技應用軟件相比,MATLAB無論在數值計算還是圖形處理上都占有很大優勢。本文主要討論的就是運用Bezier樣條原理在MATLAB上實現曲線擬合以及曲線曲面造型。
一、Bezier曲線造型
1.Bezier曲線理論原理
在空間中設定n+1個點p0,…pn,則下列參數曲線為n次Bezier曲線:
P(t)=■PiJi,n(t),0≤t≤1
式中Ji,n(t)是伯恩斯坦基函數,即
Ji,n(t)=Cinti(1-t)n-i
Cin=■,i=0,……,n
以三次Bezier曲線為例,如果p0、p1、p2、p3是空間中的四個點,那么三次多項式曲線
p3(t)=■PiB3,t(t)
可用矩陣表示如下:
P(t)=[t3t2t1]-1 3 -3 13 -6 3 0-3 3 0 01 0 0 0P0P1P2P3
式中Bi是第i個Bezier多項式,被稱為三次Bezier曲線包含了控制點p0,…p3。
2.Bezier曲線造型程序設計
在實際擬合造型的操作中,更為復雜的圖形往往由多種曲線構成,它們的復雜程度和拐點個數各不相同。按照上面的思路,則每遇到一種曲線就需要編寫一個程序,這顯然是麻煩而不切實際的。為了實現造型目的,需要編寫一種不受函數次數限制的程序,以適應所有的曲線情況。
通過構造參數點坐標矩陣,以伯恩斯坦基函數為基礎而非某個特定次數的Bezier函數,用for循環實現i從0到n(輸入控制點個數)的伯恩斯坦基函數的疊加,得到參數t以1/m為步長從0到1變化時曲線上m個點的坐標并填入坐標矩陣,最后連接這些坐標點得到曲線,從而達到不受函數次數限制的目的。根據上述思路編寫了以下程序:
■
這樣,當輸入不同個數的參數點,就可以得到不同次數的曲線。
當需要對曲線進行擬合的時候,只知道曲線情況,而不知道控制點的坐標,則需要通過曲線上的點對其進行反求。根據Bezier曲線的矩陣形式以及伯恩斯坦基函數可以很容易寫出數值方法反求控制點坐標的程序。
3.Bezier曲線造型應用
首先在坐標紙上設計出需要的圖案。
■
根據曲線實際情況(復雜程度、拐點個數、曲率大小等)將曲線分段并選擇坐標點,通過對上文編寫得到的反求控制點程序以及曲線造型程序的結合使用,最終可以在MATLAB上得到下面這幅擬合度很高的圖案(因為造型過程較為繁瑣復雜,本文省略中間造型程序)。
■
二、Bezier曲面造型
1.Bezier曲面理論原理
先給出一條以u為參數的m次Bezier曲線:
P=■PiBi,m(u),0≤u≤1(1)
式中Bi,m(u)為伯恩斯坦基函數。
讓p的(m+1)個控制點分別沿著空間的(m+1)條曲線運動,而這些曲線都是以w為參數的n次Bezier曲線:
Pi=■Pi,jBi,n(w),0≤w≤1(2)
將方程(2)代入方程(1),得到Bezier曲面的表達式
P(u,w)=P=■■Pi,jBi,m(u)Bj,n(w) 0≤u,0≤w≤1(3)
將Bezier曲面方程(3)改寫成矩陣形式
P(u,w)=B0,m(u)B1,m(u)…Bm,m(u)·
P0,0 P0,1…P0,nP1,0 P1,1…P1,nPm,0 Pm,1…Pm,nB0,n(w)B1,n(w)Bm,n(w)0≤u,w≤1(4)
把方程(4)用冪基的形式表示出來,表示為:
P(u,w)=[U][Mm][p][Mn]T[W]0≤u,w≤1(5)
式中,[U]=[um um-1…u 1];[W]=[wn wn-1…w 1]T;[Mm],[Mn]分別為m次與n次的冪基矩陣。
2.Bezier曲面造型程序設計
由上述方程的冪基形式編寫曲面造型主要程序:
■
編寫曲面造型程序的難點依然在于因為如何讓程序適應不同次數的Bezier函數的需要。顯然由于這是一個以矩陣為基礎的程序,則同曲面程序那樣采用循環語句的方式是很麻煩的。由上述程序可以看出,不同次數的Bezier函數所需要的參數矩陣和系數矩陣都不相同,參數矩陣很容易改變。所以問題在于如何快速創建龐大的系數矩陣。
還是以雙三次Bezier曲面為例,首先用taylor對曲線函數進行泰勒展開:
■
■
接下來使用命令sym2poly提取其中的系數:
■
最后用reshape將系數轉化為矩陣形式:
■
這樣,當輸入命令xishujuzhen(n)時,就可以直接得到n次Bezier曲面的系數矩陣。
3.Bezier曲線造型應用
以雙三次Bezier曲面為例,通過輸入控制點坐標可得到以下曲面:
■
Px=[2 4 6 8; 2 4 6 8; 2 4 6 8; 2 4 6 8];
Py=[8 7 7 8; 6 6 6 6; 4 4 4 4; 2 3 3 2];
Pz=[20 0 0 20; 8 10 10 8; 8 10 10 8; 20 0 0 20];
由于MATLAB所繪制的曲面是無法直接導入imageware的。所以可以想到通過把程序計算所得的矩陣數據經過一系列矩陣變形與合并,最后將其存儲為點云數據文件,導入imageware中。繼而在imageware里將點云擬合成曲面,從而更加直觀地把構造得到的曲面體現出來,并實現對其加工編輯,甚至直接制造工件。以上面最后一個曲面為例,得到以下點云圖,以及最終曲面。
總之,Bezier樣條作為曲線曲面造型中極為重要的基礎樣條之一,被廣泛運用于CAD/CAM技術中。借助其方便快捷的控制方法以及優秀的曲線屬性,曲線曲面的快速造型得以實現。
本文設計的造型程序不受函數次數限制,只需輸入控制點數據即可進行造型。同時,在曲線造型中實現了根據手繪的曲線在MATLAB中擬合出相應圖形,在曲面造型中實現了造型數據向三維制作程序的對接。使得程序具有了極強的實用性。
參考文獻:
[1]徐甜,劉凌霞.Bezier曲線的算法描述及其程序實現[N].安陽師范學院學報,2006(46).
[2]郝小忠.Bezier曲面建模方法研究與實現[J].中國制造業信息化,2011,40(23):42-45.
[3]王天軍.一個反求Bezier曲面控制點的算法[N].計算機輔助設計與圖形學學報,1992(3).
[4]Prof Denis Zorin. Bezier Curves and B-splines[Z]. New York: New York University, 2002.
(作者單位 張書華:中國農業大學理學院2009級數學1班 馬蘇奇:中國農業大學理學院)