Matlab动画制作

Matlab的动画制作:

质点动画:最简单的动画产生方式,产生一个顺着曲线轨迹运动的质点来操作。

电影动画:首先保存一系列的图形,然后按照一定的顺序像电影一样的播放。

程序动画:在图形窗口中按照一定的算法连续擦除和重绘图形对象。

质点动画

使用comet、comet3函数来产生质点动画,其步骤如下:

step1:求解出质点完整的运动轨迹坐标x,y和z。

step2:使用comet或者comet3直接绘制动点。

函数comet和comet3调用格式

调用格式

说明

comet(y)

显示质点绕着向量y的动画轨迹(二维)

comet(x, y)

显示质点绕着向量y与x的动画轨迹(二维)

comet(x, y, p)

同上面的效果,但额外地定义轨迹尾巴线的长度p*length(y),

其中p是介于0和1之间的数,默认为0.1


实例:

% 最简单的动画形式,使用comet、comet3函数
% 产生一个顺着曲线轨迹运动的质点% step1:求解出质点完整的运动轨迹坐标x,y和z
% step2:使用comet或者comet3直接绘制动点% 使用函数comet建立质点绕圆运动的动画
clf;
clear;
%{linspace是Matlab中的一个指令,用于产生指定范围内的指定数量点数,相邻数据跨度相同,并返回一个行向量。调用方法:linspace(x1,x2,N)功     能:用于产生x1,x2之间的N点行矢量,相邻数据跨度相同。其中x1、x2、N分别为起始值、终止值、元素个数。若缺省N,默认点数为100。举例如下:X = linspace(5, 100, 20)   %  产生从5到100范围内的20个数据,相邻数据跨度相同X = 5 10 15 20 25 30 35 40 45 5055 60 65 70 75 80 85 90 95 100    ps:这和X = [5 : 5 : 100]的效果是一样的。
%}
% 圆周运动
t = linspace(0, 2*pi, 10000);
x = cos(t);
y = sin(t);
% 以便比较comet是否跟着轨迹走
% plot(x, y);
axis([-1, 1 -1, 1]);  axis square;
hold on;  grid on;
% comet(x, y, p);  p:定义轨迹尾巴的长度,范围在0-1之间,默认时为0.1
comet(x, y, 0.03);

% 平抛运动
clf;
clear;
grid on;
vx = 40;
dt = linspace(0,10,1000);
dx = vx*dt;
dy = -9.8*dt.^2/2;
comet(dx, dy);

% 导弹发射
clf;
clear;
grid on;
vx = 100*cos(1/4*pi);
vy = 100*sin(1/4*pi);
t = 0:0.01:15;
dx = vx*t;
dy = vy*t-9.8*t.^2/2;
comet(dx, dy);

% 使用函数comet3建立质点绕圆运动的动画
figure();
grid on;
tt = 0:pi/500:10*pi;
plot3(sin(t),cos(t),t);
comet3(sin(tt), cos(tt), tt, 0.5);

电影动画

1、调用moviein函数对内存进行初始化,创建一个足够大的矩阵,使之能够容纳基于当前坐标大小的一系列指定的图形(此处称为帧)。

2、调用getframe函数生成每个帧。该函数返回一个列矢量,利用这个矢量,就可以创建一个电影动画矩阵。

3、调用movie函数按照指定的速度进行指定次数播放该电影动画。例如:movie(M, n)可以播放由矩阵M所定义的画面n次,默认n时只播放一次。

        getframe函数和movie函数详解:getframe函数可以捕捉动画帧,并保存到矩阵中。该函数的主要格式有:

1、f = getframe,从当前图形框中得到动画帧;

2、f = getframe(h),从图形句柄h中得到动画帧;

3、f = getframe(h,rect),从图形句柄h的指定区域rect中得到动画帧。

当创建了一系列动画帧后,可利用movie函数播放这些动画帧。该函数的主要格式有:

1、movie(M),将矩阵M中的动画帧播放一次;

2、movie(M, n),将矩阵M中的动画帧播放n次

3、movie(M, n, fps),将矩阵M中的动画帧以每秒fps帧的速度播放n次。

电影动画程序的一般结构:

% 记录电影
for j = 1:n     % 旋转并记录每个画面Plot_command;           % 以绘画函数来产生动画M(j) = getframe;          % 抓取画面值
end
Movie(M);                        % 播放动画

实例1:演示山峰函数绕Z轴旋转的动画。

clc; clear;% peaks是一个函数,其中有2个变量。由平移和放缩高斯分布函数获得。
% 参数为30,得到的X、Y、Z为30*30的矩阵。
[X, Y, Z] = peaks(30);
% surf绘制三维曲面图
surf(X,Y,Z);axis([-3,3,-3,3,-10,10]);
% 关闭所用坐标轴上的标记、格栅和单位标记。但保留由text和gtext设置的对象
axis off;
%{shading:是用来处理色彩效果的,分以下三种:1、no shading 一般的默认模式 即shading faceted2、shading flat 在faceted的基础上去掉图上的网格线3、shading interp 在flat的基础上进行色彩的插值处理,使色彩平滑过渡
%}
shading interp;
%{colormap:设定和获取当前的色图。1、colormap(map):设置颜色图为矩阵map。如果map中的任何值在区间[0,1]之外,MATLAB返回错误。2、colormap('default'):将当前的颜色图设置为默认的颜色图。3、cmap=colormap:返回当前的颜色图。返回的值都在区间[0,1]内。map是一个3列矩阵,其元素数值定义在区间[0,1]。矩阵的每行元素表示1一个真色彩向量,即红、绿、蓝3基色的系数。hot为matlab中预定义的色图样式中的一种,表示:黑、红、黄、白色浓淡交错。
%}
colormap(hot);% 建立一个20列的大矩阵
M = moviein(20);
for i = 1:20% 改变视点view(-37.5+24*(i-1),30);% 将图形保存到M矩阵M(i) = getframe;
end
% 播放画面2次
movie(M,2);

实例2:动态展示plot画图

clc; clear;% 初始化一个电影矩阵
M = moviein(16);
% 创建电影
for k = 1:16plot(fft(eye(k+16)));axis equal;% 调用getframe函数生成每个帧M(k) = getframe;
end
% 调用movie函数将电影动画矩阵M(k)播放5次
movie(M, 5);% 将前面创建的电影动画中添加一个垂直的滚动条
h = uicontrol('style','slider','position',[10 50 20100],'Min',1,'Max',16,'Value',1);
for k=1:16plot(fft(eye(k+16)));axis equal;set(h,'Value',k);% gcf为返回当前图形窗口句柄M(k) = getframe(gcf);
end
clf;
axes('Position',[0 0 11]);
movie(M,5);

实例3:改变色彩矩阵,让影片展示从正片到负片的效果

% 清除电影资料矩阵M
clear M;% 加载图片文件,并画出
load clown.mat;
% 画出小丑图像
image(X); colormap(map);
% 抓取30个画面
n = 30;
scale = cos(linspace(0, 2*pi, n));
fprintf('抓取画面中...\n');M = moviein(n);
for i = 1:n% 改变色彩矩阵(让影片呈现出从正片到负片的效果)colormap(((i-1)*(1-map)+(n-i)*map)/n);% 抓取画面,并存入电影资料矩阵MM(i) = getframe;
end
fprintf('播放电影中...\n');
% 播放电影5次(含正向与逆向播放)
movie(M, -5);


程序动画

在MATLAB中,可以采用重绘图形对象的方法来创建程序动画。改变对象的方法可以触发MATLAB对该对象进行重绘。

创建程序动画的典型步骤是:

1、绘制一个图形对象;

2、通过在一个程序循环中改变该对象的x,y和z坐标值来实现该对象的移动,从而形成动画。

在创建MATLAB的程序动画时,图形擦除也是非常重要的。

图形动态绘画中三种重要的擦除模式:(通过没置“EraseMode”属性来完成)

        1、None:在移动图形对象时,MATLAB不进行擦除;

        2、Background:在图形对象移走以后,MATLAB在原来的位置用背景色进行重绘。在这种模式下,MATLAB将原来的对象完全擦除,包括该对象下面的所有图形,如栅格线等;

3、Xor:与Background模式相比,这种模式只擦除对象本身。大多数的MATLAB程序动画都采用这种擦除模式。

目前新版本的Matlab已经不支持EraseMode属性了,坐标图的动画显示实现要依赖animatedline对象,配合drawnow函数使用。

animatedline:创建动画行,使用的语法格式及说明如下:

h = animatedline:创建一个没有数据的动画行,并将其添加到当前轴。在循环中添加点以创建线条动画。

h = animatedline(x, y):创建由初始数据点x和y定义的动画线。

h = animatedline(x, y, z):创建由初始数据点x、y和z定义的动画线。

h = animatedline(___, Name, Value):使用一个或多个Name, Value对参数指定动画行属性。例如,'Color', 'r'将线条颜色设置为红色。需要在输入成对的参数组合之后使用此选项。

h = animatedline(ax, ___):在轴指定的轴ax上创建动画线,而不是在当前轴gca中。如果不指定轴对象,则animatedline使用当前轴。

如果有另一个函数想从当前图形中获得数据,用animateline的getpoints方法:[xdata, ydata] = getpoints(h);

animatedline动画线属性

animatedline动画可以指定可选的逗号分隔的Name,Value参数对。 Name是参数名称,Value是相应的值。Name必须出现在单引号(' ')中。你可以按照任何顺序指定多个名称和值对参数Name1,Value1, ..., NameN, ValueN。

常用的animatedline动画属性

属性名称

说明

备注

Color

线条颜色

线条颜色,指定为RGB三元组,或颜色名称的字符向量,或'none'。默认的RGB值[0 0 0]对应于黑色。若指定'none',那么该行不可见的。

LineStyle

线条样式

'-':实线(默认);'--':虚线();'none':没有线

':':虚线() '-.':点划线();

LineWidth

线条宽度

线宽,默认0.5。如果线条具有标记,则线宽也会影响标记边缘。

Marker

标记符号

默认情况下,没有标记。指定标记符号会在每个数据点或顶点添加标记。

MarkerSize

标记大小

标记大小,以点数表示为正值。(默认为6)

MarkerEdgeColor

标记边缘的颜色

1、'auto':使用Color属性中指定的相同颜色。2、'none':不使用颜色,未填充的标记不可见。3、RGB三元组或颜色名称的字符向量。

MarkerFaceColor

标记内部的颜色

1、'none':不使用颜色,这使内部看不见。2、'auto':使用与Color轴属性相同的颜色。3、RGB三元组或颜色名称的字符向量

MaximumNumPoints

存储和显示的最大点数

动画行存储和显示的最大点数,指定为正值或Inf。默认值是百万。如果点数超过最大值,则动画行将保留最近添加的点,并从该行的起始处删除点。这些丢弃点不再显示,使用getpoints时不会返回。若指定为Inf,则动画行不会丢弃任何点,但存储的点数受限于可用内存量。

颜色属性常用取值

长名称

简称

RGB值

说明

'yellow'

'y'

[1 1 0]

黄色

'magenta'

'm'

[1 0 1]

品红

'cyan'

'c'

[0 1 1]

青色

'red'

'r'

[1 0 0]

红色

'green'

'g'

[0 1 0]

绿色

'blue'

'b'

[0 0 1]

蓝色

'white'

'w'

[1 1 1]

白色

'black'

'k'

[0 0 0]

黑色

标记符号取值

描述

描述

'o'

'^'

上三角形

'+'

加号

'v'

下三角形

'*'

星号

'>'

右三角形

'.'

'<'

左三角形

'x'

交叉

'pentagram' or  'p'

五角星

'square'  or  's'

矩形

'hexagram'  or  'h'

六角星

'diamond'  or  'd'

菱形

'none'

没有标记


实例1:基本实现

% 动态绘制椭圆% clf用来清除图形的命令。一般在画图之前用。
clf;
clc;
axis([-2,2,-2,2]);
% axis square 当前坐标系图形设置为方形,刻度范围不一定一样,但是一定是方形的。
% axis equal 将横轴纵轴的定标系数设成相同值,即单位长度相同,刻度是等长的,但不一定是方形的。
axis equal;
grid on;h = animatedline('Marker', 'o', 'color', 'b', 'LineStyle', 'none');
t = 6*pi*(0:0.02:1);
for n = 1:length(t)addpoints(h,  2*cos(t(1:n)),sin(t(1:n)));% 一般是为了动态观察变化过程 pause(a)暂停a秒后执行下一条指令pause(0.05);% 可以用drawnow update加快动画速度drawnow update;
end

实例2:加快刷新速度

% 加快刷新的技巧,每次循环中都只向结构体中增加一个点,实时显示的话有可能刷新速度跟不上
% 所以可以考虑一次循环中向里面添加多个点,这样就可以加快刷新了h = animatedline;
axis([0,4*pi,-1,1]);numpoints = 100000;
x = linspace(0, 4*pi, numpoints);
y = sin(x);
for k = 1:100:numpoints-100xvec = x(k:k+99);yvec = y(k:k+99);addpoints(h,xvec,yvec);drawnow
end

        实例3:控制动画的速度,有时候,希望动画显示的慢一点,上面介绍的都是加快动画的,如果要想控制动画速度,可以配合tic函数与toc函数,相当于一个记录程序运行的秒表,调用tic表示按一下开始计时,调用toc表示按一下结束及时,两个之间的时间差就是这一段程序运行的时间,下面这段代码表示控制帧速度在1000。

h = animatedline;
axis([0,4*pi,-1,1]);
numpoints = 10000;
x = linspace(0, 4*pi, numpoints);
y = sin(x);
% start timer
a = tic;
for k = 1:numpointsaddpoints(h,x(k),y(k));%check timerb =toc(a);if b >(1/1000)% update screen every 1/1000 secondsdrawnow;% reset timer after updatinga = tic;end
end

实例4:

A = [-8/3 0 0; 0 -10 10; 0 28 -1];
y = [35 -10 -7]';
h = 0.01;p = animatedline('color', 'g');
axis([0 50 -25 25 -25 25])
hold on; grid on;for i = 1:4000A(1,3) = y(2);A(3,1) = -y(2);ydot = A*y;y =y+h*ydot;% 更改坐标值addpoints(p, y(1), y(2), y(3));drawnow;
end

MATLAB动画绘制相关推荐

  1. matlab 画偏振态,MATLAB:绘制三维偏振光动画

    MATLAB:绘制三维偏振光动画 基础 代码 基础 偏振光波包括线偏振.圆偏振.椭圆偏振几个方向,其中线偏振的电场公式为: E⃗1=e⃗1E1ei(k⃗⋅r⃗−wt)\vec E_1=\vec e_1 ...

  2. tyvector在matlab中代表,MATLAB曲线绘制

    信号源产生的方法 来源:http://www.2cto.com/kf/201401/270494.html  matlab的checkerboard说明,GOOD! 来源:http://www.chi ...

  3. matlab 图形绘制,MatLab图形绘制功能

    MatLab图形绘制功能 MatLab % 0到10的1000个点的x座标 y=sin(x); % 对应的y座标 plot(x,y); % 绘图 Y=sin(10*x); plot(x,y, r: , ...

  4. 两个同时comet matlab,matlab 三维绘制

    1. mesh(Z)语句 mesh(Z)语句可以给出矩阵Z元素的三维消隐图,网络表面由Z坐标点定义,与前面叙述的x-y平面的线格相同,图形由邻近的点连接而成.它可用来显示用其它方式难以输出的包含大量数 ...

  5. matlab画y x 2,matlab怎么绘制z=sqrt(x^2 y^2)的图像

    Matlab怎么绘制x^2+y^2=1曲线 [1]zhaoyucai答非所问,涉嫌抄袭.[2]风飘水渺回答正确.[3]但还有更简单的方法:>>ezplot('x^2+y^2=1',[-1. ...

  6. matlab中如何求零极点,Matlab中绘制零极点

    <Matlab中绘制零极点>由会员分享,可在线阅读,更多相关<Matlab中绘制零极点(2页珍藏版)>请在人人文库网上搜索. 1.ZPLANE Z-plane zero-pol ...

  7. matlab图形绘制经典案例,MATLAB经典教程第四章_图形绘制.ppt

    <MATLAB经典教程第四章_图形绘制.ppt>由会员分享,可在线阅读,更多相关<MATLAB经典教程第四章_图形绘制.ppt(32页珍藏版)>请在人人文库网上搜索. 1.Ma ...

  8. 【新星计划】MATLAB plot绘制图像

    在MATLAB中绘制函数图形的步骤如下: 先定义变量 x,通过指定的变量 x 值的范围,该函数被绘制: 然后定义函数, y = f(x): 最后调用 plot 命令,如 plot(x, y). 接下来 ...

  9. Matlab:绘制简单能量的接收机工作特性曲线(Energy_detection_simulation_ok)

    Matlab:绘制简单能量的接收机工作特性曲线(Energy_detection_simulation_ok) 目录 输出结果 实现代码 输出结果 实现代码 % This code is to plo ...

最新文章

  1. OpenCV读写xml和yml文件
  2. nginx的一次安装与配置
  3. IAR的const,变量指定绝对地址,函数指定存取区域
  4. 谈身份管理之基础篇 - 保障云上安全,从[规范账号使用]开始
  5. android本地图片,Android中ImageView实现选择本地图片并显示功能
  6. 农村男女离婚,为什么感觉很多都是女人什么都带不走?
  7. 如何在Android上使背景20%透明
  8. Android 视频播放
  9. Dev C++支持c++11标准的编译方法
  10. Linux镜像最全版本下载网站
  11. 利用第三方rec解锁安卓手机锁屏密码
  12. 金山pdf阅读器 独立版V10.1.0.6683
  13. QQ小程序加QQ群和加好友
  14. 深度学习——激活函数(激励函数)理论学习
  15. php生成手机桌面快捷方式,php三种创建桌面快捷方式
  16. pwm控制直流电机转速流程图_直流电机PWM控制原理
  17. Android从本地服务器获取Mp3实现边下边播(JavaEE+Tomcat+SQLServer)
  18. mac环境下搭建frida环境并连接网易mumu模拟器
  19. OpenGl学习笔记二:创建自己的着色器
  20. 有人对你说辛苦了要怎么回复

热门文章

  1. 取得当前日期相对应的月初,月末,季初,季末,年初,年末
  2. 用计算机亩换算成平方,平方换算亩计算器(农村土地面积计算公式)
  3. 做了三年数据分析,给你的几点建议
  4. CSS 3之文字样式
  5. 智能网联汽车信息安全研究报告
  6. Unity3d 实现节奏空间(Beat Saber)模型切割功能项目工程源码。
  7. JSD-2204-Redis缓存-Day17
  8. unity 和安卓互相交互
  9. 【31】poisoned TLP导致的MCE问题
  10. oracle获取每月的第一天和最后一天