童德茂,張 華
(阜陽(yáng)職業(yè)技術(shù)學(xué)院 工程科技學(xué)院,安徽 阜陽(yáng) 236031)
?
Matlab用于動(dòng)畫制作旋轉(zhuǎn)曲面設(shè)計(jì)
童德茂,張華
(阜陽(yáng)職業(yè)技術(shù)學(xué)院 工程科技學(xué)院,安徽 阜陽(yáng) 236031)
摘要:旋轉(zhuǎn)曲面可以構(gòu)造成現(xiàn)代工業(yè)中諸多產(chǎn)品形狀,選擇一種工程語(yǔ)言將旋轉(zhuǎn)曲面工件造型動(dòng)態(tài)直觀演示出來是非常必要的。Matlab以矩陣作為數(shù)據(jù)操作的基本單位,擁有開放式可擴(kuò)充環(huán)境、強(qiáng)大的繪圖功能和靈活的程序設(shè)計(jì)技巧,融合Matlab矩陣處理問題特點(diǎn),列舉動(dòng)畫制作旋轉(zhuǎn)曲面程序,以探究Matlab實(shí)現(xiàn)旋轉(zhuǎn)曲面動(dòng)畫制作的完整過程。
關(guān)鍵詞:Matlab;旋轉(zhuǎn)曲面;動(dòng)畫程序;幾何變換
Matlab以矩陣作為數(shù)據(jù)操作的基本單位,集成了圖形圖像處理、數(shù)值分析、矩陣運(yùn)算、可視化和仿真等諸多強(qiáng)大功能的交互式計(jì)算機(jī)環(huán)境工程語(yǔ)言[1-2]。在Matlab諸多應(yīng)用中,最能給學(xué)者們的研究帶來方便的是它的開發(fā)式可擴(kuò)充環(huán)境和數(shù)據(jù)可視化應(yīng)用,此外,人們還特別關(guān)注Matlab軟件在制作精確、形象的動(dòng)畫方面的應(yīng)用。在極限趨近研究中,我們已經(jīng)探討了Matlab直觀動(dòng)態(tài)地表示極限漸進(jìn)過程動(dòng)畫[3]。融合Matlab在矩陣運(yùn)算中的特點(diǎn),深層次探討Matlab的應(yīng)用,使用axis,ho1d on和for...end等Matlab語(yǔ)句,人們可直接用Matlab獲得動(dòng)畫繪制而發(fā)掘新的契合點(diǎn)[3]。如語(yǔ)句hold on是保證在同一坐標(biāo)軸內(nèi)完成畫圖,而for...end循環(huán)則是繪制動(dòng)畫最為關(guān)鍵的語(yǔ)句,上述命令還僅僅是Matlab工具軟件中實(shí)現(xiàn)動(dòng)畫制作的基本架構(gòu)。為獲取內(nèi)容豐富且生動(dòng)的旋轉(zhuǎn)曲面動(dòng)畫,要選取有效的數(shù)據(jù)采樣和切實(shí)可行的制作動(dòng)畫方式方法。工程設(shè)計(jì)和曲面造型中普遍應(yīng)用旋轉(zhuǎn)曲面,應(yīng)用旋轉(zhuǎn)曲面可以廣泛制作現(xiàn)代工業(yè)產(chǎn)品形狀[4],因此,各領(lǐng)域工作者一直廣泛關(guān)注旋轉(zhuǎn)曲面的應(yīng)用。動(dòng)畫表現(xiàn)方式克服了傳統(tǒng)靜態(tài)視覺表現(xiàn)的不足,多種動(dòng)畫表現(xiàn)方法也就相繼誕生,閆宇晗、常鑫分析在C#中用GDI實(shí)現(xiàn)圖形動(dòng)態(tài)顯示[5]。本文探討Matlab用于繪制旋轉(zhuǎn)曲面動(dòng)畫的形成過程。
1繪制旋轉(zhuǎn)曲面動(dòng)畫研究
1.1繪制曲面矩陣的各列呈現(xiàn)旋轉(zhuǎn)曲面形成過程
選取一定形狀的曲線圍繞固定軸旋轉(zhuǎn)而構(gòu)造成的曲面即為旋轉(zhuǎn)曲面[6]。在Matlab動(dòng)畫設(shè)計(jì)制作旋轉(zhuǎn)曲面時(shí),若能繪制出任一曲線在旋轉(zhuǎn)過程中各個(gè)位置產(chǎn)生的曲線,旋轉(zhuǎn)曲面生成過程將會(huì)被真實(shí)完整的展示出來。在幾何空間中,某一曲線繞固定軸旋轉(zhuǎn)產(chǎn)生在每個(gè)位置的系列曲線都對(duì)應(yīng)著Matlab矩陣所描述旋轉(zhuǎn)曲面數(shù)據(jù)列,順次地畫出矩陣各列數(shù)據(jù),則會(huì)生動(dòng)呈現(xiàn)生成旋轉(zhuǎn)曲面過程的動(dòng)畫。
例中a,b為常數(shù),取a=15,b=2,編制Matlab的·M文件并運(yùn)行,動(dòng)態(tài)演示旋轉(zhuǎn)橢球面繪制過程。
程序的M文件如下:
clear;
a=15;
b=2;
t=0:pi/30:2*pi;
n=length(t);
y=15*cos(t);
z=2*sin(t);
x =0*ones(1,n);
plot3(x,y,z)
pause(1)
for i=0:pi/60:pi;
x=y.*sin(i);
y1=y.*cos(i) ;
plot3(x,y1,z )
pause(1)
grid on
hold on
view(-20,60)
end
hold off
圖形動(dòng)畫結(jié)果如圖1所示。
圖1橢球面動(dòng)畫形成二幅截圖
運(yùn)行例1中的Matlab程序演示了橢圓繞Z軸旋轉(zhuǎn)而構(gòu)成橢球面的形象直觀完整過程,運(yùn)用動(dòng)畫鮮明地展示了旋轉(zhuǎn)橢球面的生成和旋轉(zhuǎn)橢球面的本質(zhì)[7]。以直線、圓、雙曲線、拋物線為例,分別編寫它們的·M程序文件,則可形象直觀動(dòng)態(tài)地演示相應(yīng)曲線繞固定軸(Z軸)旋轉(zhuǎn)生成旋轉(zhuǎn)曲面的完整過程。
盡管例1的程序比較簡(jiǎn)單,但程序運(yùn)行速度卻非???,能清晰和直觀呈現(xiàn)旋轉(zhuǎn)曲面的具體形成過程。因運(yùn)行程序過程中不能一一繪制出旋轉(zhuǎn)曲面生成中的各條母線,故繪制旋轉(zhuǎn)曲面是由有間隔的曲線構(gòu)成的,展示的曲面動(dòng)畫效果不太理想。即使設(shè)法增加繪制曲線的密集度,還是彌補(bǔ)不了繪制旋轉(zhuǎn)曲面的缺憾,但對(duì)形象和直觀實(shí)現(xiàn)一般的旋轉(zhuǎn)曲面演示還是有實(shí)用價(jià)值的。為了解決上述程序設(shè)計(jì)的缺憾,最有效的操作就是填實(shí)畫出的曲線間的間隙,在程序設(shè)計(jì)的實(shí)際操作上用surf()或mesh()函數(shù)畫旋轉(zhuǎn)曲面片替代plot3()畫旋轉(zhuǎn)曲線,就可以消除此類問題。
1.2選矩陣A中相鄰兩列A(:,i-1,i)繪制曲面片
在同一坐標(biāo)系中,設(shè)計(jì)旋轉(zhuǎn)曲面程序時(shí),按序把描述曲面矩陣的相鄰兩列數(shù)據(jù)點(diǎn)用surf()或mesh()函數(shù)以曲面片形式繪制出來,畫出的旋轉(zhuǎn)曲面形成過程的動(dòng)畫將會(huì)更為生動(dòng)形象真實(shí)。
例2在區(qū)間[-4;4;-4;4],作16z=x2+y2拋物線生成橢圓拋物面過程。
a=sqrt(3);
r=0:0.1:a;
t=0:0.1:2*pi;
[T,R]=meshgrid(t,r);
X=4*cos(T).*R;
Y=4*sin(T).*R;
Z=2*ones(size(T)).*R.^2;
axis([-10,10,-10,10,0,10]);
hold on;
n=size(Z,2);
for i=2:n
surf(X(:,i-1:i),Y(:,i-1:i),Z(:,i-1:i));
drawnow;
pause(0.2);
end
結(jié)果如圖2所示圖形動(dòng)畫。
圖2動(dòng)畫形成旋轉(zhuǎn)拋物曲面片二幅截圖
對(duì)比圖1和圖2,明顯看出旋轉(zhuǎn)曲面片繪制的圖2視覺效果的動(dòng)畫更真實(shí)和完美。因A (:,i-1:i)和A(:,[i-1:i])皆能描述曲面矩陣A中相鄰兩列[8],將例2中surf(X(:,i-1:i),Y(:,i-1:i),Z(:,i-1:i))換成 surf(X(:,[i-1,i]),Y(:,[i-1,i]),Z(:,[i-1,i])),仍達(dá)到同樣的效果。
1.3NaN實(shí)現(xiàn)旋轉(zhuǎn)曲面動(dòng)畫效果
Matlab中NaN是非數(shù)值特殊量,一般情況下,NaN是在有正負(fù)無(wú)窮大參與的加減、乘法、除法的0/0、∞/∞等式中產(chǎn)生。Matlab中的ZaZ常數(shù)表示是一些不可用數(shù)據(jù)。若將曲面矩陣數(shù)據(jù)的某一部分用NaN描述,則會(huì)裁剪函數(shù)值為ZaZ的部分,進(jìn)而將在曲面上形成孔洞效果[9]。將旋轉(zhuǎn)曲面矩陣的第i列后的各列均賦值為NaN,順序繪制圖形,得到圖3所示的有助于直觀認(rèn)識(shí)工業(yè)產(chǎn)品形狀的旋轉(zhuǎn)曲面動(dòng)畫效果。
曲線為25(x2+y2)-16z2=400動(dòng)畫程序M文件如下:
z=-15:0.1:15;
y=4*sqrt( 1+z.^2 /25);
[x1,y1,z1]=cylinder(y,40);
z1=15.*z1-7.5;
axis([-20,20,-20,20,-10,10]);
hold on;
n=size(z1,2);
for i=1:n;
z11=z1
z11(:,i+1:n)=NaN
mesh(x1,y1,z11)
drawnow
pause(0.2)
end
圖形動(dòng)畫如圖3所示。
圖3NaN繪制旋轉(zhuǎn)拋物面二幅截圖
e=0:0.1:10;
h=sqrt(3*e);
[a,b,c]=cylinder(h,100);
c1=3*c+1;
axis([-10,10,-10,10,-5,5]);
hold on;
n=size(c1,2);
for i=1:n;
c11=c1;
c11(:,i+1:n)=NaN;
mesh(a,b,c11);
mesh(a,b,-c11);
drawnow;
pause(0.2);
end
圖形動(dòng)畫結(jié)果如圖4所示。
圖4旋轉(zhuǎn)雙曲拋物動(dòng)畫過程截圖
Inf同NaN一樣也是無(wú)窮大量,繪圖時(shí)函數(shù)值為inf這些數(shù)據(jù)點(diǎn)的部分也不顯示,用inf代替例4程序中的NaN,同樣達(dá)到實(shí)現(xiàn)旋轉(zhuǎn)曲面形成的動(dòng)畫效果。
例5修改實(shí)例4程序?yàn)椋?/p>
e=0:0.1:10;
h=sqrt(3*e);
[a,b,c]=cylinder(h,100);
c1=3*c+1;
axis([-10,10,-10,10,-5,5]);
hold on;
n=size(c1,2);
for i=1:n;
c11=c1;
c11(:,i+1:n)=inf;
mesh(a,b,c11);
mesh(a,b,-c11);
drawnow;
pause(0.2);
end
圖形動(dòng)畫結(jié)果如圖4所示。
2高層指令生成動(dòng)態(tài)圖形
利用Matlab生成旋轉(zhuǎn)曲面動(dòng)畫有助于直觀認(rèn)識(shí)工業(yè)產(chǎn)品形狀,我們還可以使用Matlab“高層”圖形中的彗星軌線指令方便地產(chǎn)生圖形及色彩動(dòng)態(tài)變化效果[10]。
例6實(shí)現(xiàn)衛(wèi)星返回地球的運(yùn)動(dòng)軌跡示意動(dòng)態(tài)演示。其程序M文件如下:
shg;
R0=1;
a=12*R0;
b=9*R0;
T0=2*pi;
T=5*T0;
dt=pi/100;
t=[0:dt:T]';
f=sqrt(a^2-b^2)
;th=12.5*pi/180;
E=exp(-t/20);
x=E.*(a*cos(t)-f);
y=E.*(b*cos(th)*sin(t));
z=E.*(b*sin(th)*sin(t));
plot3(x,y,z,'g');
[X,Y,Z]=sphere(30);
X=R0*X;
Y=R0*Y;
Z=R0*Z;
grid on;
hold on;
surf(X,Y,Z)
shading interp
x1=-18*R0;
x2=6*R0;
y1=-12*R0;
y2=12*R0;
z1=-6*R0;
z2=6*R0;
axis([x1,x2,y1,y2,z1,z2])
view([133 65])
comet3(x,y,z,0.02)
hold off
圖5衛(wèi)星返回地球的運(yùn)動(dòng)軌跡示意
圖形動(dòng)畫結(jié)果如圖5所示。
3結(jié)束語(yǔ)
本文根據(jù)Matlab處理數(shù)據(jù)的特點(diǎn),重點(diǎn)以動(dòng)畫演示繪制旋轉(zhuǎn)曲線、曲面片、給曲面矩陣賦值NaN或inf實(shí)現(xiàn)旋轉(zhuǎn)曲面設(shè)計(jì)為例,完整動(dòng)態(tài)地演示旋轉(zhuǎn)曲面形成過程,Matlab生成旋轉(zhuǎn)曲面動(dòng)畫表現(xiàn)方式克服了傳統(tǒng)靜態(tài)視覺表現(xiàn)的不足。例題中實(shí)現(xiàn)旋轉(zhuǎn)曲面動(dòng)畫制作對(duì)于其它曲面動(dòng)畫作圖也具有一定參考和指導(dǎo)作用。為方便今后直接運(yùn)行使用,還可在適當(dāng)gui交互界面中嵌入例題的程序,或?qū)⑵浔4鏋閙文件或m函數(shù)。
參考文獻(xiàn):
[1]葛哲學(xué).精通Matlab [M].北京:電子工業(yè)出版社,2008:126-147.
[2]向修棟,付云芝. 在matlab中實(shí)現(xiàn)旋轉(zhuǎn)曲面的動(dòng)畫設(shè)計(jì)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2011(3):53- 55.
[3]童德茂.探討Matlab在高職《高等數(shù)學(xué)》教學(xué)中的應(yīng)用[J].阜陽(yáng)師范學(xué)院學(xué)報(bào)(自然科學(xué)版), 2010(3):79-82.
[4]張先波,楊文穎,宋來忠,等.給定主曲率函數(shù)的旋轉(zhuǎn)曲面設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2009(4):1030-1035.
[5]閆宇晗,常鑫.在C#中用GDI實(shí)現(xiàn)圖形動(dòng)態(tài)顯示[J].計(jì)算機(jī)技術(shù)與發(fā)展,2006,16(12):117-119.
[6]劉衛(wèi)國(guó).Matlab程序設(shè)計(jì)與應(yīng)用[M].北京:高等教育出版社,2006:56-100.
[7]趙亞男,牛言濤.MATLAB在解析幾何教學(xué)中的應(yīng)用[J].長(zhǎng)春大學(xué)學(xué)報(bào),2014(4):54-58.
[8]胡華.用Matlab解決數(shù)學(xué)分析中的圖形問題[J].西南民族大學(xué)學(xué)報(bào),2003,29( 6):766-771.
[9]段俊生,安建業(yè),徐立.MATLAB曲面繪制中的挖補(bǔ)方法[J].大學(xué)數(shù)學(xué),2006,22( 4):36-39.
[10]張志涌.精通Matlab R2011a[M].第二版.北京:北京航空航天大學(xué)出版社,2012:392-397.
[10]陳素根.Matlab在“計(jì)算機(jī)圖形學(xué)”教學(xué)中的應(yīng)用[J].安慶師范學(xué)院學(xué)報(bào)(自然科學(xué)版), 2014(3):131-134.
Designs of Matlab to Make Animation of Revolution Surface
TONG De-mao,ZHANG Hua
(Department of Engineering Technology, Fuyang Vocational and Technical College, Fuyang 236031, China)
Abstract:Many product shapes can be generated by the rotating surface in modem industry. It is very necessary to choose a project way to surface of revolution workpiece modelling dynamic visual presentation. Matlab has an open extensible environment and strong drawing-graphics function and flexible program design skills. Combining with the characteristics of the matrix of dealing with the problem in matlab and using the matrix as the basic unit of data operation, we explore the rotation surface integrity of the animation process.
Key words:matlab, rotation surface, animation program, geometry
文章編號(hào):1007-4260(2015)02-0125-05
中圖分類號(hào):TP312
文獻(xiàn)標(biāo)識(shí)碼:A
作者簡(jiǎn)介:童德茂,男,安徽金寨人,碩士,阜陽(yáng)職業(yè)技術(shù)學(xué)院工程科技學(xué)院副教授,研究方向?yàn)镸atlab圖形圖像處理、數(shù)值計(jì)算。
基金項(xiàng)目:安徽省教育振興計(jì)劃項(xiàng)目(2013-86)和安徽省質(zhì)量工程項(xiàng)目(2014jxtd059)。
收稿日期:2014-12-25