nullMatlab 制作动画Matlab 制作动画涉及的主要问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
涉及的主要问题一般步骤
使用的主要函数及功能
示例程序及运行结果
存在的问题一般步骤:一般步骤:确定动画的帧数nframes
画出图形
为nframes帧幅图形分配足够内存空间
用getframe生成动画的数据矩阵
以每秒n幅的速度播放动画
函数及功能 函数及功能 M=moviein(nframes)
为nframes帧幅图分配足够内存空间
movie(n)
以每秒n幅的速度播放动画
getframe
对当前的图象进行快照,截取一幅画面信息(称为动画中的一帧),一幅画面信息形成一个很大的列向量
meshgrid:用于产生x-y平面上的网格数据
mesh:绘制网面图
函数及功能函数及功能imwrite():将数据转换成图像文件
surf:画立体曲面图
peaks:生成一个凹凸有致的曲面
figure:创建一个数字图形图像
aviobj = avifile(filename,'PropertyName',value,...)
AVIFILE returns a handle to an AVI file object, aviobj.
mov = aviread(filename,index)
reads the AVI movie filename into the MATLAB movie structure mov
保存动画-生成avi格式的电影文件保存动画-生成avi格式的电影文件创建电影剪辑文件,并存储起来:
aviobj=avifile('文件名.avi','fps',3);%定义一个avi文件,%AVIOBJ = AVIFILE(FILENAME,'PropertyName',VALUE,'PropertyName',VALUE,...)%各属性详细说明见matlab帮助
for i=1:n
%在当前窗体上生成一帧图像
frame=getframe(gca); %获得一帧图像
aviobj=addframe(aviobj,frame);%并加到电影剪辑文件中
end
aviobj=close(aviobj);%关闭文件,结束数值仿真模拟过程。
保存动画-生成avi格式的电影文件保存动画-生成avi格式的电影文件直接利用函数movie2avi
movie2avi(mov,’filename.avi’)
mov由getframe获得,生成文件名为filename.avi的视频文件
一般格式:
for i=1:n
figure(i)
F(i)=getframe;
end;
movie2avi(F,'...filename.avi')
保存动画-直接保存gif动画保存动画-直接保存gif动画一般步骤:
m(:,k)=getframe;
%%%构造gif图像的帧,
nn(:,:,:)=getframe;
%%转换为可以直接输出的格式
%如果要制作彩色的图像,你只能把生成的彩色图像单独制作(使用其他软件)
nn1=nn.cdata;
nn1=rgb2gray(nn1);
imwrite(nn1,'out.gif','gif','WriteMode','append')
null画sinx,cosx图形
二维动画
三维动画null画sinx,cosx图形
x=[0:0.5:360]*pi/180;plot(x,sin(x),x,cos(x))
二维动画
x = -pi:pi/30:pi;
h = plot(x,cos(x),'o','MarkerEdgeColor','k','MarkerFaceColor','r','MarkerSize',8,'EraseMode','Xor')
for j = 1:3000
y = sin(3*x+0.006*j);
set(h,'ydata',y);
drawnow;
end
播放动画播放动画二维动画
s =0.2; x1=0; % 确定起始点横坐标x1及其增量 nframes = 50; % 确定动画总帧数 for k = 1:nframes x1= x1+s; % 确定画图时横坐标终止值x1 x =0:0.01:x1; y =sin(x); plot(x,y); % 在x=[0 x1]作y=sin(x)曲线 axis([0 2*pi -1 1]) % 定义坐标轴范围 grid off % 不显示网格线 M(k) = getframe; % 将当前图形存入矩阵M(k) end movie(M,3) % 重复3次播放动画M 保存动画的示例1保存动画的示例1三维动画
[x,y,z]=peaks(30); %peaks产生一个凹凸有致的曲面
surf(x,y,z) %用X和Y定义x-y坐标网格,Z定义网格上每一点的高度,来生成三维曲面
axis([-3 3 -3 3 -10 10])
m=moviein(15);
for i=1:15
view(-37.5+24*(i-1),30)
m(:,i)=getframe;
end
movie(m)
movie2avi(m,’out.avi’)
保存动画的示例2保存动画的示例2function avimake
warning off;
load data //data是已有的文件
[M,N,K]=size(data);
data=data/(max(abs(data(:))));
aviobj = avifile('mymovie.avi','fps',10);
for kk=1:10:K
imagesc(data(:,:,kk));
set(gca,'clim',[-1 1]);
colormap(hsv(128))
frame = getframe(gca);
aviobj = addframe(aviobj,frame);
end
aviobj = close(aviobj);其它转换gif动画的方法其它转换gif动画的方法直接作gif动画的软件较多,比如Ulead GIF Animator,批量格式转换用XnView 其它动画示例程序其它动画示例程序Z = peaks; surf(Z)
axis tight
set(gca,'nextplot','replacechildren');
for j = 1:50
surf(sin(2*pi*j/20)*Z,Z)
F(j) = getframe;
end
movie(F,20)
其它动画示例程序其它动画示例程序clear;clc;
[x,y]=meshgrid(-8:.1:8);
for j=1:20
f=@(x,y)(sin(sqrt((11-j)*(x.^2+y.^2)))./sqrt((11-j)*(x.^2+y.^2)+eps));
z=f(x,y);
surf(x,y,z);shading interp;
M(j) = getframe;
if j==1
[I,map]=rgb2ind(M(j).cdata,256);
imwrite(I,map,'out.gif','DelayTime',.1)
else
imwrite(rgb2ind(M(j).cdata,map),map,'out.gif','WriteMode','append','DelayTime',.1)
end
end
movie2avi(M,'out.avi')