matlab画动画

一般来说,matlab制作动画有四种方式。

第一 、以质点运动轨迹的方式显示

使用comet、comet3函数,前者是二维,后者是三维

comet(y)显示质点绕向量y,comet(x,y)显示质点绕向量y与x,comet(x,y,p),其中为轨迹尾巴的长度

以comet(x,y)为例,

显示平抛运动

vx = 40;

t = 0:0.001:10;

x = vx*t;

y = -9.8*t.^2/2;

comet(x,y)

显示导弹发射

vx = 100*cos(1/4*pi);

vy = 100*sin(1/4*pi);

t = 0:0.001:15;

x = vx*t;

y = vy*t-9.8*t.^2/2;

comet(x,y)

匀速圆周运动

sita = 0:0.0001:2*pi;

r = 10;

x=r*cos(sita);

y=r*sin(sita);

comet(x,y)

comet3与comet的用法相类似,可以在帮助文件里的例子

t = -10*pi:pi/250:10*pi;

comet3((cos(2*t).^2).*sin(t),(sin(2*t).^2).*cos(t),t)

第二、以电影播放的方式显示

保存想要产生动画的图片,存储为一系列各种类型的二维、三维图,再像放电影的方式按次序播放出来。步骤由getframe函数将当前的图片抓取为电影的画面,再由movie函数将动画显示出来。

如:

[x,y] = meshgrid([-1.05:.2:3.75]);

z = x.*exp(-x.^2-y.^2);

axis tight;

set(gca,\'nextplot\',\'replacechildren\');

for j = 1:40

surf(x*sin(pi*j/100),y*sin(pi*j/100),z*sin(-pi*j/100));

m(j) = getframe

end

movie(m)

第三、以对象方式显示

设置对象的属性EraseMode,更新对象来产生新图,drawnow()函数进而覆盖旧图,从而使得图形不断发生变化。

例:

x = -pi:pi/30:pi;

h = plot(x,cos(x),\'o\',\'MarkerEdgeColor\',\'k\',\'MarkerFaceColor\',\'r\',\'MarkerSize\',8,\'EraseMode\',\'Xor\')

for j = 1:10000

y = 1/2*sin(3*x+0.006*j);

set(h,\'ydata\',y);

drawnow;

end

第四、以旋转颜色的方式显示

matlab中如何输出avi格式影片文件

以上文《穿越(fly through)图形动画实例》为基础,将屏幕上显示的动画保存到avi格式文件中。

clc; %清屏

clear all; %清除所有变量

load wind; %加载matlab自带数据程序

wind_speed = sqrt(u.*u + v.*v + w.*w);

%计算风速

hpatch=patch(isosurface(x,y,z,wind_speed,35)); %isosurface计算wind_speed=45的等势面

%patch命令绘制等势面

isonormals(x,y,z,wind_speed,hpatch); %isonormals计算等势面的正交向量,使画面更光滑

set(hpatch,\'FaceColor\',\'red\',\'EdgeColor\',\'none\'); %设定等势面的表面颜色为红色

daspect([1 1 1]); �ta aspect

[f verts]=reducepatch(isosurface(x,y,z,wind_speed,45),.05);

% reducepatch ,减少需要描绘等势面所需要表面数, 减少至 5%

hcone=coneplot(x,y,z,u,v,w,verts(:,1),verts(:,2),verts(:,3),2); %绘制穿越等势表面的圆锥流体

set(hcone,\'FaceColor\',\'blue\',\'EdgeColor\',\'none\');

camproj perspective %设置该图形的投影方式为透视

camva(25); %设置视角为25度

hlight = camlight(\'headlight\'); %在照相机出创建光源.

set(hpatch,\'AmbientStrength\',.1,... %设置环境光的光度为0.1,表面环境光近乎为黑色

\'SpecularStrength\',1,... %设置块对象的镜面反射强度为1

\'DiffuseStrength\',1); %设置快对象的漫反射强度为1

set(hcone,\'SpecularStrength\',1); %设置锥形流体的镜面反射强度为1

set(gcf,\'Color\',\'k\'); %将图像窗的颜色设置为黑色

lighting phong %sets the lighting to phong.

set(gcf,\'Renderer\',\'zbuffer\'); %设置光源的着色属性为zbuffer,也可以尝试openGL

hsline=streamline(x,y,z,u,v,w,80,30,11); %创建一个从点(80,30,11)开始的流线

xd = get(hsline,\'Xdata\'); %取得这条流线的x,y,z坐标

yd = get(hsline,\'Ydata\');

zd = get(hsline,\'Zdata\');

delete(hsline); %流线已无用,可删除

%以下为此动画的核心部分

aviobj=avifile(\'fly_through.avi\',\'fps\',3);

%创建avi对象,命名为fly_through.avi, 3帧每秒

for i=1:length(xd)-50 %从点(80,30,11)开始,到终点前的50个点出结束。

campos([xd(i),yd(i),zd(i)]); %设定照相机的位置为当前点位置

camtarget([xd(i+5),yd(i),zd(i)]); %设置照相机的目标位置,在照相机位置向前5个点出

camlight(hlight,\'headlight\'); %光源也移至照相机处

drawnow %绘制移动后的图形

frame=getframe(gcf); %获取当前frame

aviobj=addframe(aviobj,frame); %将当前图像加入到avi对象中

end

aviobj=close(aviobj); %结束时关闭avi对象

%注意,此方法,运行时不能移动或改变动画窗口的大小。

function makeavi(filepath,frames,format)

% This function make AVI video from images

% filepath: the location of target image

% frames: the numbles of frame that you want to use

% fromat: the format of images

%================设置相关属性======================

location=filepath;

fig=figure;

set(fig,\'DoubleBuffer\',\'on\');

set(gca,\'xlim\',[-80 80],\'ylim\',[-80 80],...

\'NextPlot\',\'replace\',\'Visible\',\'off\')

aviObj=avifile(\'examples.avi\'); % Create a new AVI file

aviObj.Quality = 100; %只对压缩格式有效,[0,100],default:75

aviObj.fps=1; %the speed of the AVI movie in frames per second (fps),default:15 fps

aviObj.Compression=\'None\'; % compression codec指定压缩编解码器

%=======设置黑白图像属性===========

%cola=0:1/255:1;

%cola=[cola;cola;cola];

%cola=cola\';

%aviobj.colormap=cola;

% =====多帧循环开始,读序列图像=================

for num=1:frames

Im_origin = imread( strcat(location,\'\\',num2str(num),\'.\',format) );

Im= im2uint8(Im_origin);

% F = getframe(gca);

aviObj = addframe(aviObj,uint8(Im));

end

aviObj=close(aviObj);

mov = aviread(\'examples.avi\');

movie(mov);

close all;

转载自:http://blog.sina.com.cn/s/blog_6b7d710b0101m39u.html