楊 慧, 王新年
(太原師范學院幾何代數研究室,太原030001)
?
運用Matlab討論橢球面性質
楊慧,王新年
(太原師范學院幾何代數研究室,太原030001)
[摘要]橢球面是測繪學物理學中常用的曲面之一.本文通過運用Matlab強大的繪圖功能和設計技巧,用四種方法繪制了三軸橢球面,設計了平行截割法研究曲面形狀的程序,且在Matlab中實現了橢球面的切平面與法線的設計,另外依據軟件采用矩陣處理問題特點,實現了橢球面生成過程的動畫設計.通過運行程序,表明運用Matlab可以得到生動、逼真的曲面動態(tài)圖形.
[關鍵詞]Matlab; 橢球面; 平行截割法; 動態(tài)圖形
1引言
Matlab是一個交互式的系統(tǒng),編程以矩陣為基本數據單元,按照IEEE的數值計算標準進行計算的,它將編輯、編譯、鏈接、執(zhí)行融為一體.它除了包含豐富的數學軟件外,還包括信息工程和控制工程等方面的內容,如信息處理、小波分析、魯棒控制等等.另外該軟件具有強大的數據可視化功能,能方便地繪制各種復雜的二維、三維和多維圖形,自帶許多繪圖函數,可以設置視角、關照效果,還可創(chuàng)建動畫效果,對我們研究曲面性質起到了重要的作用.
下面將在Matlab中實現對橢球面性質的研究.
2在Matlab中繪制橢球面圖形
在空間直角坐標系下,橢球面的標準方程為
(1)
其中a,b,c為正實數.
橢球面也稱為橢圓面,其參數方程為
文中以a=3;b=2;c=1為例來繪制橢球面.
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實際上是二維圖形繪制指令plot在三維空間的擴展,繪制的是多條曲線;指令mesh繪制的是網格曲面,該曲面將鄰接的點用直線連接起來,從而形成網狀曲面;指令surf繪制的是表面圖,各線條之間的空擋用顏色填充.
3在Matlab中實現橢球面性質研究
橢球面有很好的對稱性,是有界曲面.他與三個對稱平面的交線都是橢圓,且曲面上的點(除了六個頂點)都是橢圓點,是個有心二次曲面.
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%容許對圖形放大
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
從以上圖形中可以直觀地看出截線是一系列橢圓,所以橢球面可以看作一系列橢圓所生成
由于橢球面上的點都是橢圓點,即都是正常點,故每一點處的切平面均存在.(圖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)
運行結果為
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)
運行結果為
S=48.8821
由前面的性質1可知,用平行于xOy面的平面z=h (-c≤h≤c)截橢球面時,截口為橢圓,該橢圓方程為
Matlab編程為:
a=3;b=2;c=1;
syms h
f=@(h) pi*a*b*(1-(h./c).∧2)
V=quad(f,-c,c)
運行結果為:V=25.1327
4Matlab中實現橢球面生成過程
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
注以上繪制的是坐標曲線v-曲線族,當n=m/4時,運行程序
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
注以上繪制的是坐標曲u-曲線族,當n=m/2時,運行程序
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
注以上繪制的是相鄰坐標曲線v-曲線構成的曲面片
for i=2∶n
surf(x(∶,i-1∶i),y(∶,i-1∶i),z(∶,i-1∶i));drawnow; pause(0.3);
end
注以上繪制的是相鄰坐標曲線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
在以上程序的基礎上,我們可以改動幾何變換矩陣做出橢圓繞任意直線生成的旋轉曲面的動態(tài)圖形,也可設計出空間任意曲線繞一直線旋轉生成曲面的程序.
依據Matlab軟件數據可視化特點,以橢球面為研究對象,研究了橢球面的性質,特別采用平行截割法對曲面的生成過程進行了程序設計,研究過程中涉及的方法技巧具有一定的指導意義,我們可以用相似的方法研究其它的曲面如雙曲面、拋物面等.另外,Matlab軟件擁有圖像處理工具箱,提供了大量的用于圖像處理的函數,可以對圖像和視頻進行采集,并對圖像的進行變換、增強和邊緣檢測,希望能進一步運用它來處理幾何中的各類復雜曲線曲面.
[參考文獻]
[1]呂林根,許子道.解析幾何[M].4版.北京:高等教育出版社,2006.
[2]趙海濱.MATLAB應用大全[M].北京:清華大學出版社,2012.
[3]任明慧.MATLAB在空間圖形中的動態(tài)應用[J].數學理論與應用,2008,28(1):40-44.
[4]向修棟,付云芝.在MATLAB中實現旋轉曲面的動畫設計[J].計算機技術與發(fā)展,2011,21(3):52-55.
[5]趙亞男,牛言濤.MATLAB在解析幾何教學中的應用[J].長春大學學報,2011,21(4):54-58.
[6]孔祥強.MATLAB軟件在空間解析幾何教學中的應用探索[J].計算機應用與軟件,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
[中圖分類號]G642.0
[文獻標識碼]C
[文章編號]1672-1454(2015)05-0120-07
[收稿日期]2015-04-27