matlab动画

来源:互联网 发布:centos7 ubuntu 对比 编辑:程序博客网 时间:2024/05/18 01:59
动画制作通常有两种方法:一种是预先将图形制作好,并放到图形缓冲区内,然后
一帧一帧地播放。另一种方法是保持整个背景图案不变,只更新运动部分的图案,以便
加快每幅图的实时生成速度。
1.简单动画制作
在 getframe 命令下,可以完成动态数据到动态画面的制作。其使用格式及制作步
骤一般为:
for j=1:n
plot_command
M(j) = getframe;
end
movie(M,n)
其中M(j)=getframe 将当前图形窗口中的画面作为第j 帧存入矩阵M,movie(M,n)将按
-307-
顺序放映矩阵M 中存储的画面,并重复n 次。

x=-3:0.1:3;
[x,y]=meshgrid(x);
z=sin(x.*y).*exp(x.*y/5);
for j=1:30
mesh(cos(4*pi*j/30)*z,z)
m(j)=getframe
end
movie(m,10)
例 模拟 6 个移动物体
x0=[150 85 150 145 130 0];
y0=[140 85 155 50 150 0];
q=[243 236 220.5 159 230 52]*pi/180;
t=0:0.05:2*pi;
for i=0:280
pause(0.01);
for j=1:5
axis([0 160 0 160]);
fill(x0(j)+0.8*i*cos(q(j))+4*cos(t),y0(j)+0.8*i*sin(q(j))+4*sin(t),'b')
hold on;
end
fill(x0(6)+0.8*i*cos(q(6))+4*cos(t),y0(6)+0.8*i*sin(q(6))+4*sin(t),'r')
hold off;
end
2.其它例子
在 Matlab 里利用图形的“EraseMode”属性可以实现显示新对象,擦除旧对象,而
又不破坏背景图案。图形的“EraseMode”属性有以下四种:
normal 方式
重绘整个显示区,这种方式产生的图形最准确,但较慢。
none 方式
不做任何擦除,直接在原来图形上绘制。
xor 方式
对象的绘制和擦除由背景颜色和屏幕颜色的异或而定。只擦除和屏幕颜色不一致
的旧对象的点,只绘制和屏幕颜色不一致的新对象的点。
background 方式
把旧对象的颜色变为背景色,这种方式影响被擦除对象下面的对象。
当新对象的属性修改后,应刷新屏幕,使新的对象显示出来。Matlab 里屏幕刷新
的命令是drawnow。drawnow 命令使Matlab 暂停目前的任务而去刷新屏幕。若不使用
drawnow 命令,Matlab 则等到任务序列执行完后才刷新。
例 布朗运动
(1)先确定布朗运动的点数n 和一个温度s(或速度)。比如n=20,s=0.002。达
到最好的动画效果的n、s 与使用的计算机的性能有关。在以原点为中心、边长为1 的
正方形内产生n 个位置随机分布的点。
-308-
(2)在单位正方形里绘制所有的点。设置图形的“EraseMode”属性为异或(xor),
即当图形的某个点的位置变化时,不用全部重绘图形,而只绘制不相同的部分,这将大
大提高绘图速度。
(3)用while 循环实现动画效果,在每一次循环中给点的坐标加上一些正态分布
的噪声,这样整个图形中只有点的坐标发生变化,而不用全部重绘整个图形。
程序如下:
clc,clear
n=20;s=0.002;
axis square
grid off
x=rand(n,1)-0.5;y=rand(n,1)-0.5;
h=plot(x,y,'.');
set(h,'EraseMode','xor','MarkerSize',18)
while 1
x=x+s*rand(n,1);y=y+s*rand(n,1)
set(h,'Xdata',x,'Ydata',y)
if all(x>1) & all(y>1)
break
end
drawnow
end
例 制作一幅钻石沿着圆周运动的动画。
程序如下:
t=0:pi/200:pi*2;
x=sin(t);y=cos(t);
axis square
plot(x,y,'b')
n=length(t);
h=line('color','red','marker','diamond','erasemode','xor');
i=1;j=1;
while 1
set(h,'xdata',x(i),'ydata',y(i))
drawnow
i=i+1;j=j+1;
if i>n
i=1;
end
if j>2*n
break
end
end
0 0
原创粉丝点击