楊 慧, 王新年
(太原師范學(xué)院幾何代數(shù)研究室,太原030001)
?
運(yùn)用Matlab討論橢球面性質(zhì)
楊慧,王新年
(太原師范學(xué)院幾何代數(shù)研究室,太原030001)
[摘要]橢球面是測(cè)繪學(xué)物理學(xué)中常用的曲面之一.本文通過(guò)運(yùn)用Matlab強(qiáng)大的繪圖功能和設(shè)計(jì)技巧,用四種方法繪制了三軸橢球面,設(shè)計(jì)了平行截割法研究曲面形狀的程序,且在Matlab中實(shí)現(xiàn)了橢球面的切平面與法線的設(shè)計(jì),另外依據(jù)軟件采用矩陣處理問(wèn)題特點(diǎn),實(shí)現(xiàn)了橢球面生成過(guò)程的動(dòng)畫設(shè)計(jì).通過(guò)運(yùn)行程序,表明運(yùn)用Matlab可以得到生動(dòng)、逼真的曲面動(dòng)態(tài)圖形.
[關(guān)鍵詞]Matlab; 橢球面; 平行截割法; 動(dòng)態(tài)圖形
1引言
Matlab是一個(gè)交互式的系統(tǒng),編程以矩陣為基本數(shù)據(jù)單元,按照IEEE的數(shù)值計(jì)算標(biāo)準(zhǔn)進(jìn)行計(jì)算的,它將編輯、編譯、鏈接、執(zhí)行融為一體.它除了包含豐富的數(shù)學(xué)軟件外,還包括信息工程和控制工程等方面的內(nèi)容,如信息處理、小波分析、魯棒控制等等.另外該軟件具有強(qiáng)大的數(shù)據(jù)可視化功能,能方便地繪制各種復(fù)雜的二維、三維和多維圖形,自帶許多繪圖函數(shù),可以設(shè)置視角、關(guān)照效果,還可創(chuàng)建動(dòng)畫效果,對(duì)我們研究曲面性質(zhì)起到了重要的作用.
下面將在Matlab中實(shí)現(xiàn)對(duì)橢球面性質(zhì)的研究.
2在Matlab中繪制橢球面圖形
在空間直角坐標(biāo)系下,橢球面的標(biāo)準(zhǔn)方程為
(1)
其中a,b,c為正實(shí)數(shù).
橢球面也稱為橢圓面,其參數(shù)方程為
文中以a=3;b=2;c=1為例來(lái)繪制橢球面.
Input(′a=′);input(′b=′);input(′c=′); Input(′N=′);
[x,y,z]=ellipsoid(0,0,0,a,b,c,N)%[X,Y,Z]=ELLIPSOID(XC,YC,ZC,XR,YR,ZR,N) center(XC,YC,ZC) and semi-axis lengths (XR,YR,ZR)
surf(x,y,z);legend(′橢球面′);axis equal
t=0∶pi/30∶2*pi;
[u,v]=meshgrid(t,t);
x=3*cos(u).* cos(v);
y=2*cos(u).* sin(v);
z=sin(u);
figure; surf(x,y,z)
axis equal
[x,y,z]=sphere(30);
surf(x,y,z);
axis equal
mesh(3*x,2*y,z)
圖1 圖2
a=3;b=2;c=1;N=30;
xgrid=linspace(-a,a,N);
ygrid=linspace(-b,b,N);
[x,y]=meshgrid(xgrid,ygrid);
z=c*sqrt(1-y.*y/b∧2-x.*x/a∧2); m=1;
z1=real(z);
for k=2∶N-1
for j=2∶N-1
if imag(z(k,j))~=0 z1(k,j)=0;
else if all(imag(z([k-1∶k+1],[j-1∶j+1])))~=0 z(k,j)=NaN;
end
end
surf(x,y,z1),hold on
if m==1 z2=-z1; surf(x,y,z2);
end
xlabel(′x′),ylabel(′y′),zlabel(′z′)
注指令plot3實(shí)際上是二維圖形繪制指令plot在三維空間的擴(kuò)展,繪制的是多條曲線;指令mesh繪制的是網(wǎng)格曲面,該曲面將鄰接的點(diǎn)用直線連接起來(lái),從而形成網(wǎng)狀曲面;指令surf繪制的是表面圖,各線條之間的空擋用顏色填充.
3在Matlab中實(shí)現(xiàn)橢球面性質(zhì)研究
橢球面有很好的對(duì)稱性,是有界曲面.他與三個(gè)對(duì)稱平面的交線都是橢圓,且曲面上的點(diǎn)(除了六個(gè)頂點(diǎn))都是橢圓點(diǎn),是個(gè)有心二次曲面.
a=3;b=2;c=1;u=0.5;
t=-3∶.2∶3;
[x,y]=meshgrid(t);
z1=u*ones(length(t));
axis equal ;
subplot(2,2,1),
surf(x,y,z1);%繪出平面圖形
hold on
[x,y,z2]=ellipsoid(0,0,0,3,2,1,30);%繪出橢球面圖形
surf(x,y,z2);
zoom on%容許對(duì)圖形放大
xlabel(′x′);
ylabel(′y′)
zlabel(′z′);
colormap(jet),
r0=abs(z1-z2)<=0.01;
zz=r0.*z1;xx=r0.*x;yy=r0.*y;
subplot(2,2,2),
h1=plot3(xx(r0~=0),yy(r0~=0),zz(r0~=0),′-′); %繪出橢球面與平面的交線
set(h1,′markersize′,0.1),hold on ,grid on
for i=1∶9,
v=1-i*0.2;t=-3∶.2∶3;
[x,y]=meshgrid(t);
z3=v*ones(size(x));
subplot(2,2,3),
surf(x,y,z3);
[x,y,z2]=ellipsoid(0,0,0,3,2,1,30);
hold on
mesh(x,y,z2);
hidden off,
colormap(hot)
r1=abs(z3-z2)<=0.01;
zzz=r1.*z3;xxx=r1.*x; yyy=r1.*y;
subplot(2,2,4),
h2=plot3(xxx(r1~=0),yyy(r1~=0),zzz(r1~=0),′b-′);
set(h2,′markersize′,0.1),hold on,grid on
end
從以上圖形中可以直觀地看出截線是一系列橢圓,所以橢球面可以看作一系列橢圓所生成
由于橢球面上的點(diǎn)都是橢圓點(diǎn),即都是正常點(diǎn),故每一點(diǎn)處的切平面均存在.(圖4)
syms x y z;
f(x,y,z)=x∧2/9+y∧2/4+z∧2-1;
圖4
nv=jacobian(f,[x y z]);
[x,y,z]=ellipsoid(0,0,0,3,2,1,20);
surf(x,y,z)
x=2;y=-4/3;z=1/2;
nv=double(subs(nv));
hold on
quiver3(x,y,z,nv(1),nv(2),nv(3),.5);
t=-1∶.2∶1;
[xx,yy]=meshgrid(t+x,t+y);
zz=-(nv(1)*(xx-x)+nv(2)*(yy-y))/nv(3)+z;
mesh(xx,yy,zz);
xlabel(′x′);ylabel(′y′);zlabel(′z′);
syms u v a b c
r=[a*cos(u).*cos(v),b*cos(u).*sin(v),c*sin(u)];
ru=[diff(r(1),u),diff(r(2),u),diff(r(3),u)];
rv=[diff(r(1),v),diff(r(2),v),diff(r(3),v)];
N=cross(ru,rv);
M=norm(N)
運(yùn)行結(jié)果為
M=a*b.*cos(u).*sqr(sin(u)∧2+c∧2/a∧2.*cos(u)∧2.*cos(v)∧2+c∧2/b∧2*cos(u)∧2sin(v)∧2
a=3;b=2;c=1;
fun=@(u,v) a*b.*cos(u).*…
sqrt(sin(u).∧2+(c/a.*cos(u).*cos(v)).∧2+(c/b.*cos(u).*sin(v)).∧2)
S=8*quad2d(fun,0,pi/2,0,pi/2)
運(yùn)行結(jié)果為
S=48.8821
由前面的性質(zhì)1可知,用平行于xOy面的平面z=h (-c≤h≤c)截橢球面時(shí),截口為橢圓,該橢圓方程為
Matlab編程為:
a=3;b=2;c=1;
syms h
f=@(h) pi*a*b*(1-(h./c).∧2)
V=quad(f,-c,c)
運(yùn)行結(jié)果為:V=25.1327
4Matlab中實(shí)現(xiàn)橢球面生成過(guò)程
t= 0∶pi/30∶2*pi;
[u,v]=meshgrid(t,t);
x=3 * cos(u).* cos(v);
y=2 * cos(u).* sin(v);
z=sin(u);
axis([-4 4 -3 3 -2 2]);
hold on;
m=size(z,2);
for i=2∶m
plot3(x(i,∶),y(i,∶),z(i,∶));drawnow; pause(0.3);
end
注以上繪制的是坐標(biāo)曲線v-曲線族,當(dāng)n=m/4時(shí),運(yùn)行程序
for i=2∶n
plot3(x(i,∶),y(i,∶),z(i,∶));drawnow; pause(0.3);
end
則得到橢球面的部分曲面圖(圖5).
圖5
for i=2∶m
plot3(x(∶,i),y(∶,i),z(∶,i));drawnow; pause(0.3);
end
注以上繪制的是坐標(biāo)曲u-曲線族,當(dāng)n=m/2時(shí),運(yùn)行程序
for i=2∶n
plot3(x(∶,i),y(∶,i),z(∶,i));drawnow; pause(0.3);
end
則得到橢球面的部分曲面圖(圖6).
圖6
for i=2∶n
surf(x(i-1∶i,∶),y(i-1∶i,∶),z(i-1∶i,∶));drawnow; pause(0.3);
end
注以上繪制的是相鄰坐標(biāo)曲線v-曲線構(gòu)成的曲面片
for i=2∶n
surf(x(∶,i-1∶i),y(∶,i-1∶i),z(∶,i-1∶i));drawnow; pause(0.3);
end
注以上繪制的是相鄰坐標(biāo)曲線u-曲線構(gòu)成的曲面片
考慮橢圓
M0=[0 0 0];L=[0 0 1];
theta=0∶pi/10∶2*pi;
y1=2*cos(theta);z1=sin(theta);x1=0*ones(1,length(theta));
plot3(x1,y1,z1)
alpha=pi/60;
I=ones(length(theta),1);
u=[x1;y1;z1];
U=ctranspose(u);V=horzcat(U,I);
for i=1∶120
A=[cos(i*alpha),sin(i*alpha),0,0;-sin(i*alpha),cos(i*alpha),0,0;0,0,1,0;0,0,0,1];
W=V*A;
mesh([W(∶,1),U(∶,1)],[W(∶,2),U(∶,2)],[W(∶,3),U(∶,3)]);
colormap(jet); hold on; pause(0.1)
drawnow;
end
在以上程序的基礎(chǔ)上,我們可以改動(dòng)幾何變換矩陣做出橢圓繞任意直線生成的旋轉(zhuǎn)曲面的動(dòng)態(tài)圖形,也可設(shè)計(jì)出空間任意曲線繞一直線旋轉(zhuǎn)生成曲面的程序.
依據(jù)Matlab軟件數(shù)據(jù)可視化特點(diǎn),以橢球面為研究對(duì)象,研究了橢球面的性質(zhì),特別采用平行截割法對(duì)曲面的生成過(guò)程進(jìn)行了程序設(shè)計(jì),研究過(guò)程中涉及的方法技巧具有一定的指導(dǎo)意義,我們可以用相似的方法研究其它的曲面如雙曲面、拋物面等.另外,Matlab軟件擁有圖像處理工具箱,提供了大量的用于圖像處理的函數(shù),可以對(duì)圖像和視頻進(jìn)行采集,并對(duì)圖像的進(jìn)行變換、增強(qiáng)和邊緣檢測(cè),希望能進(jìn)一步運(yùn)用它來(lái)處理幾何中的各類復(fù)雜曲線曲面.
[參考文獻(xiàn)]
[1]呂林根,許子道.解析幾何[M].4版.北京:高等教育出版社,2006.
[2]趙海濱.MATLAB應(yīng)用大全[M].北京:清華大學(xué)出版社,2012.
[3]任明慧.MATLAB在空間圖形中的動(dòng)態(tài)應(yīng)用[J].數(shù)學(xué)理論與應(yīng)用,2008,28(1):40-44.
[4]向修棟,付云芝.在MATLAB中實(shí)現(xiàn)旋轉(zhuǎn)曲面的動(dòng)畫設(shè)計(jì)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2011,21(3):52-55.
[5]趙亞男,牛言濤.MATLAB在解析幾何教學(xué)中的應(yīng)用[J].長(zhǎng)春大學(xué)學(xué)報(bào),2011,21(4):54-58.
[6]孔祥強(qiáng).MATLAB軟件在空間解析幾何教學(xué)中的應(yīng)用探索[J].計(jì)算機(jī)應(yīng)用與軟件,2012,29(8):297-300.
Discussing Ellipsoid Properties by Using Matlab
YANGHui,WANGXin-nian
(Geometric and Algebra Laboratory,Taiyuan Normal University,Taiyuan 610500,China)
Abstract:The ellipsoid is one of the curved surface in surveying and mapping science,physics. In this paper,by using the powerful drawing graphics and designing skills,four methods are used to draw the three-axis ellipsoid. The program of parallel cutting method is designed to study surface shape,and a tangent plane and normal are analyzed. In addition,on the basis of data processing techniques of using matrix characteristics,implements the ellipsoid generation process of animation design. By running the program,it shows that the vivid and perfect animations surface can been formed based on Matlab.
Key words:Matlab; ellipsoid; parallel cutting method; animation graphical
[中圖分類號(hào)]G642.0
[文獻(xiàn)標(biāo)識(shí)碼]C
[文章編號(hào)]1672-1454(2015)05-0120-07
[收稿日期]2015-04-27