[分享原创] 平面截马鞍面的动画演示程序
本帖最后由 xiezhh 于 2009-2-25 09:41 编辑用平面从不同方向截马鞍面,观察交线形状,从而更清楚的了解马鞍面。生成的动画比较大,就不上传了。
这是原创,我在2008a中已测试过。
%平面截双曲抛物面(马鞍面)
clear
clc
mov=avifile('平面截双曲抛物面(马鞍面).avi','fps',3);
a=4;
b=4;
X=linspace(-12,12,30);
Y=linspace(-12,12,30);
=meshgrid(X,Y);
Z=X.^2/a^2-Y.^2/b^2;
figure(1)
surf(X,Y,Z)
T=[ 1.1832 -0.8084 0 -0.1874
0.1903 0.4799 0.9511 -0.8106
0.5858 1.4770 -0.3090 11.2109
0 0 0 1.0000];
view(T)
hold on
quiver3(0,0,0,-1,0,0,20,'k','filled','LineWidth',2);
quiver3(0,0,0,0,-1,0,30,'k','filled','LineWidth',2);
quiver3(0,0,0,0,0,1,15,'k','filled','LineWidth',2);
text(0,-2,15,'Z')
text(0,-30,1,'Y')
text(-20,0,1.5,'X')
axis equal
axis off
%colormap gray
=meshgrid(-13:0.5:13,-13:0.5:13);
Z=-9*ones(size(X));
h=surf(X,Y,Z);
shading interp
alpha(0.6);
%axis([-17,17,-17,17,-10,10])
title('平面截双曲抛物面(马鞍面)的演示动画')
h1=plot3(0,-12,-9,'-k');
h2=plot3(0,12,-9,'-k');
x=-12:0.5:12;
for z=-9:0.1:0
set(h, 'xdata' ,X, 'ydata' ,Y, 'zdata' ,z*ones(size(X)));
xx=x;
zz=z*ones(size(xx));
yy1=-b*sqrt(xx.^2/a^2-zz);
yy2=b*sqrt(xx.^2/a^2-zz);
set(h1, 'xdata' ,xx, 'ydata' ,yy1, 'zdata' ,zz);
set(h2, 'xdata' ,xx, 'ydata' ,yy2, 'zdata' ,zz);
drawnow; % 刷新屏幕
pause(0.05)
f=getframe(gcf);
mov=addframe(mov,f);
end
for z=0:0.1:9
set(h, 'xdata' ,X, 'ydata' ,Y, 'zdata' ,z*ones(size(X)));
yy=x;
zz=z*ones(size(yy));
xx1=-a*sqrt(yy.^2/b^2+zz);
xx2=a*sqrt(yy.^2/b^2+zz);
set(h1, 'xdata' ,xx1, 'ydata' ,yy, 'zdata' ,zz);
set(h2, 'xdata' ,xx2, 'ydata' ,yy, 'zdata' ,zz);
drawnow; % 刷新屏幕
pause(0.05)
f=getframe(gcf);
mov=addframe(mov,f);
end
delete(h2);
delete(h);
=meshgrid(-13:0.5:13,-9:0.5:9);
Y=-12*ones(size(X));
h=surf(X,Y,Z);
shading interp
alpha(0.6);
xx=-12:0.1:12;
for y=-12:0.1:12
set(h, 'xdata' ,X, 'ydata' ,y*ones(size(X)), 'zdata' ,Z);
yy=y*ones(size(xx));
zz=xx.^2/a^2-yy.^2/b^2;
set(h1, 'xdata' ,xx, 'ydata' ,yy, 'zdata' ,zz);
drawnow; % 刷新屏幕
pause(0.05)
f=getframe(gcf);
mov=addframe(mov,f);
end
delete(h);
=meshgrid(-13:0.5:13,-9:0.5:9);
X=-12*ones(size(Y));
h=surf(X,Y,Z);
shading interp
alpha(0.6);
yy=-12:0.1:12;
for x=-12:0.1:12
set(h, 'xdata' ,x*ones(size(Y)), 'ydata' ,Y, 'zdata' ,Z);
xx=x*ones(size(yy));
zz=xx.^2/a^2-yy.^2/b^2;
set(h1, 'xdata' ,xx, 'ydata' ,yy, 'zdata' ,zz);
drawnow; % 刷新屏幕
pause(0.05)
f=getframe(gcf);
mov=addframe(mov,f);
end
delete(h1);
delete(h);
hold off
mov=close(mov); 本帖最后由 ljelly 于 2009-2-25 08:59 编辑
是否原创,请注明
粘贴代码,请注意格式
有代码插入格式
便于编辑 没有avi文件,怎么验证你的代码
实现的效果呢?没法执行啊 ljelly斑竹所说的插入代码格式是右上角的“源码”复选框吗?
我把循环次数减少,生成的动画见附件。 我把avi格式动画改做成gif格式动画,见附件。 确实牛,学习学习 ljelly斑竹所说的插入代码格式是右上角的“源码”复选框吗?
我把循环次数减少,生成的动画见附件。
xiezhh 发表于 2009-2-25 09:54 http://forum.simwe.com/images/common/back.gif
在你编辑的时候,上面的菜单栏除字体大小,颜色外
学有代码,引用等选项
按其中的代码标志,即出现插入代码,粘贴即可 挺不错.
楼主这两天对getframe和drawnow很有兴趣嘛,好像写了不止一个相关代码:victory: 总共写了7个:空间曲线绕Z轴生成旋转面、平面截单叶双曲面、平面截双曲抛物面(马鞍面)、平面截双叶双曲面、平面截椭球面、平面截椭圆抛物面、平面截椭圆锥面。
大同小异,没有全发上面。一开始我只生成avi格式动画,后来都改成gif格式了。 xiezhh兄是不是天津高校的数学系老师?看你对MATLAB的涉猎范围很广泛,呵呵,热爱程度非同一般!好像北京研讨会你也参加,期待ing 我是天津科技大学数学系的老师,对matlab比较热爱,通过论坛上的交流也学到不少东西,我也非常期待与各位面对面的交流,5月16号北京见吧!
页:
[1]