MATLAB技术论坛
电子期刊
 
 
 
 
 
 
 
 
 
 
 
 
编辑:xiezhh
制作:MATLAB技术论坛
版权:MatlabSky©版权所有
网址:www.matlabsky
 
 
 
 
 
 
1
2010.09
No.1
中国权威MATLAB论坛核心期刊
 
 
 
 
 
MATLAB技术论坛简介
 
   
1 动画的制作... 1
1.1 电影动画... 1
1.1.1  电影动画演示实例(一)——千变万化的线条... 2
1.1.2  电影动画演示实例(二)——跳动的红心... 2
1.2 擦除动画... 3
1.2.1  Matlab擦除重绘动画实例(一)——运动的小球... 4
1.2.2  Matlab擦除重绘动画实例(二)——单摆横梁... 5
1.2.3  Matlab擦除重绘动画实例(三)——时钟演示... 5
1.2.4  Matlab擦除重绘动画实例(四)——小球绕跑道运动... 7
1.3 质点动画... 8
1.3.1  质点动画演示(一) 8
1.3.2  质点动画演示(二)——平抛运动... 8
1.3.3  质点动画演示(三)——导弹发射... 9
1.4 霓虹灯效果动画... 9
1.4.1  霓虹灯效果动画实例(一)—— 霓虹闪烁的球体... 9
1.4.2  霓虹灯效果动画实例(二)——  一颗花心... 9
1.5 GIF格式动画制作... 10
1.5.1  GIF格式动画制作案例——绕螺旋线运动的小球... 10
2 动画的保存... 10
3 有关动画制作的实验报告... 11
4 更多动画实例... 14
4.1  电影动画演示——旋转的山峰... 14
4.2  擦除动画实例——卫星绕地球运动(注释很详细) 14
4.3  擦除动画实例——太阳|地球|月亮|卫星,绕转演示动画(注释很详细) 15
5 光学夫朗和费衍射现象模拟Matlab源代码... 16
6 牛顿环动画演示Matlab源代码... 18
7 使用MATLAB绘制原子轨道和电子云图形... 19
8 振动摆MATLAB动画源代码... 19
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
MATLAB基础应用版块
Matlab中动画的实现、制作和保存
www.matlabsky/thread-592-1-1.html
 
 
Matlab的确是一个很优秀的工程计算软件,除了强大的矩阵运算,仿真分析外,绘图功能也是相当的强大。
但是由于Matlab本身的多线程编程缺陷(所谓多线程,就是MATLAB没法同时执行多个回调,只能排队一个一个的按顺序运行,Timer对象除外,它是MATLAB中唯一能够执行多线程的方法),想要动态的画图,并且能够很好的在GUI中得到控制,还不是一件很容易的事情。
但是动画具有生动形象直观的好处,对我的教学、研究等都有不小的作用。那好,我在这里勉为其难的介绍下Matlab中是如何制作动画的。
1 动画的制作
Matlab中动画实现的方法主要有下面三种
1.1 电影动画
帖子地址:www.matlabsky/thread-593-1-1.html
 
从不同的视角拍下一系列对象的图形,并保存到变量中,然后按照一定的顺序像电影一样播放。
    电影动画的好处就是,运行一次可以多次播放,甚至可以直接生成avi文件,直接独立与Matlab环境播放。这是其它三种动画制作方法所不具备的。
MATLAB中,创建电影动画的过程分为以下四步:
step1:调用moviein函数对内存进行初始化(该步骤在Matlab5.3以上均可省略),创建一个足够大的矩阵,使之能够容纳基于当前坐标轴大小的一系列指定的图形(此处称为帧)。
step2:调用getframe函数生成每个帧。该函数返回一个列矢量,利用这个矢量,就可以创建一个电影动画矩阵。
getframe函数可以捕捉动画帧,并保存到矩阵中。一般将该函数放到for循环中得到一系列的
动画帧。该函数格式有:
(1)F=gefframe,从当前图形框中得到动画帧
(2)F=gefframe(h),从图形句柄h中得到动画帧
(3)F=getframe(hrect),从图形句柄h的指定区域rec中得到动画帧
step3:调用movie函数按照指定的速度和次数运行该电影动画。
当创建了一系列的动画帧后,可以利用movie函数播放这些动画帧。该函数的主要格式有:
(1)movie(M),将矩阵M中的动画帧播放一次
(2)movie(M,n),将矩阵M中的动画帧播放n
(3)movie(M,n,fps),将矩阵M中的动画帧以每秒fps帧的速度播放n
step4:调用movie2avi函数可以将矩阵中的一系列动画帧转换成视频文件avi文件。这样,即使脱离了matlab环境都可以播放动画。
 
该方法的经典格式是:
%录制电影动画
for j=1:n
%
%这里输入我们的绘图命令
%
M(j) = getframe;
end
movie(M)
%单帧显示方法
f = getframe(gcf);
lormap);
image(f.cdata);
 
1.1.1  电影动画演示实例(一)——千变万化的线条
%by dynamic
%see also www.matlabsky
%2008.7.12
 
close all
figure('toolbar','none','menubar','none','NumberTitle',...
'off','name','电影动画录制——Matlabsky');
axis equal
m=moviein(20,gcf);%在当前窗口下,截取20
set(gca,'nextplot','replacechildren','box','off','color','b','xgrid','on')
title('截图当前窗口的20帧动画')
for j=1:20
  plot(fft(eye(j+16)))
  m(:,j)=getframe(gcf); %截取动画帧,保存到m变量中
end
hh=figure('toolbar','none','menubar','none','NumberTitle',...
'off','name','电影动画播放——Matlabsky');
title('将截取的动画播放5')
set(gca,{'xtick','ytick','xticklabel','yticklabel'},{[],[],[],[]})
movie(hh,m,5)
 
1.1.2  电影动画演示实例(二)——跳动的红心
帖子地址:www.matlabsky/viewthread.php?tid=9489
 
% by xiezhh
x = linspace(-2,2,100);
[X,Y,Z] = meshgrid(x,x,x);
I1 = (X.^2+9/4*Y.^2+Z.^2-1).^3-X.^2.*Z.^3-9/80*Y.^2.*Z.^3;
p = patch(isosurface(X,Y,Z,I1,0));
set(p, 'FaceColor', 'red', 'EdgeColor', 'none');
view(3);
axis equal ;
axis off;
light('Posi',[0 -2 3]);    % (0,-2,3)点处建立一个光源
lighting phong
html animation属性set(gca,'nextplot','replacechildren');
% 记录电影
XX = get(p,'XData');
YY = get(p,'YData');
ZZ = get(p,'ZData');
for j = 1:20
    bili = sin(pi*j/20);
        set(p,'XData',bili*XX,'YData',bili*YY,'ZData',bili*ZZ)   
    F(j) = getframe;
end
% 放映10
movie(F,10)
1.2 擦除动画
 帖子地址:www.matlabsky/thread-240-1-1.html
 
画在图形窗口中按照一定的算法连续擦除和重绘图形对象,表现为动画,这个也是MATLAB中使用最多的方法。
        使用Matlab的绘图函数不断重复绘制图形对象,重绘过程中递增式地改变图形对象位置将产生动画效果。在重绘对象的过程中之所以能产生动画效果是由于对原来的图形对象进行了擦除处理。
MATLAB中,创建擦除重绘动画的过程分为以下三步:
step1:设置重绘对象的擦除模式'EraseMode'模式
Matlab的图形绘制函数允许采用不同的擦除模式来擦除原来的对象,不同的擦除模式将产生不同的动画效果。擦除模式是通过没置“EraseMode”属性来完成的,一共有三种擦除模式:
none:重新绘制图形对象时不擦除原来的对象,这种模式可动态演示图形的生成过程,如曲线和旋转曲砸的生成过程
 
background:在重新绘制图形对象之前。用背景重绘对象来达到擦除原来图形对象的目的。该模式会擦除任何对象和它下面的任何图形
Xor:在重新绘制图形对象之前,只擦除原来的对象,不会擦除其他对象或图形。这种模式能产生图形对象移动的效果
step2:在循环语句中使用set更改图形的xdata,ydatazdata等坐标数据
step3:使用darwnow命令刷新屏幕
 
该方法的经典格式是:
%擦除重绘模式动画
%选择一个擦除模式
set(h,'erasemode',erasemode)%h是需要执行动画图像的句柄,一般都是由line或者plot创建
%
%需要执行一些图形计算命令
%
%循环语句中更新坐标数据,一般使用for或者while
for i=1:n
    %
    %必要的MATLAB命令
    %
    set(h,'xdata',xdata,'ydta',ydata)%更新图像的坐标数据

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。