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