《MATLAB SYNTAX》第13章 动画制作
第13章 动画制作(13.1) drawnow(13.2) pause(13.3) rotate这一章介绍三个动画指令:drawnow、pause、rotate,并用一些例子来感受一下动画制作的思路。(13.1) drawnowdrawnow指令可以暂停程序的执行,并刷新图形窗口。可以利用这一功能与xdata、ydata、zdata等图形数据属性的修改,实现图形的动画效果。先来看个简单的例子:cl
第13章 动画制作
这一章介绍三个动画指令:
drawnow
、pause
、rotate
,并用一些例子来感受一下动画制作的思路。
(13.1) drawnow
drawnow
指令可以暂停程序的执行,并刷新图形窗口。可以利用这一功能与xdata
、ydata
、zdata
等图形数据属性的修改,实现图形的动画效果。先来看个简单的例子:
clc;clear;clf;
x = 0:0.1:2*pi;
y = sin(x);
h = plot(x,y); %画初始位置曲线
xlim([0,4*pi]);
deltaX = 0.01; %定义相邻两帧画面中曲线在x方向上的距离
while(1) %这是一个死循环,会让曲线向右运动的画面一直播放
x = x + deltaX;
set(h,'xdata',x);
drawnow;
end
例:利用
drawnow
指令制作一个小圆面做圆周运动的动画(小圆面的半径为0.5,圆周轨迹的半径为10)。
clc;clear;clf;
t = 0:0.05:2*pi;
%画出小圆的运动轨迹
X = 10*cos(t);
Y = 10*sin(t);
H = plot(X,Y,'r--');
axis([-15,15,-15,15]);
axis equal;
hold on;
%画出小圆的初始位置
x = 0.5*cos(t) + 10;
y = 0.5*sin(t) + 0;
h = fill(x,y,'g');
deltaTheta = pi/180; %以1°为间隔运动
while(1)
x = 0.5*cos(t) + 10*cos(deltaTheta);
y = 0.5*sin(t) + 10*sin(deltaTheta);
set(h,'xdata',x,'ydata',y);
drawnow;
deltaTheta = deltaTheta + pi/180;
end
(13.2) pause
与
drawnow
函数一样的道理,还可以利用pause
指令与xdata
、ydata
、zdata
等图形数据属性的修改,实现图形的动画效果。
例:利用
pause
指令制作一个圆面半径从10逐渐减小到1的动画。
clc;clear;clf;
t = 0:0.05:2*pi;
x = 10*cos(t);
y = 10*sin(t);
h = fill(x,y,'b');
axis([-15,15,-15,15]);
axis equal;
hold on;
deltaR = 0.25;
while(deltaR <= 9)
x = (10 - deltaR) * cos(t);
y = (10 - deltaR) * sin(t);
set(h,'xdata',x,'ydata',y);
pause(0.1);
deltaR = deltaR + 0.25;
end
例:利用
pause
指令设计一个模拟小方块沿水平板向右移动的动画。
clc;clear;clf;
%画出平板
flatX = [0,10,10,0];
flatY = [0,0,0.1,0.1];
flatH = fill(flatX,flatY,'g');
set(gca,'position',[0.1,0.5,0.8,0.16]); %将坐标轴设置在图形窗口的[0.1,0.5]位置处,长0.8,宽0.16
axis equal;
hold on;
%画出小方块的初始位置
blockX = [0,0.5,0.5,0];
blockY = [0.1,0.1,0.6,0.6];
blockH = fill(blockX,blockY,'r');
deltaX = 0.25;
while(blockX(2) < flatX(2)) %开始运动
blockX = blockX + deltaX;
set(blockH,'xdata',blockX);
pause(0.1);
end
(13.3) rotate
rotate(h,direction,alpha) %h是图形对象的句柄,direction是一个二元或三元向量,代表的是从图形坐标轴原点到该点的向量,alpha是图形旋转的角度
例:利用
rotate
指令制作一个模拟钟表时针转动的动画。
clc;clear;clf;
hold on;
axis equal;
axis([-8,8,-8,8]);
%画出时钟的12个刻度
clockScaleT = linspace(0,(2*pi-pi/6),12);
clockScaleX = 6*cos(clockScaleT);
clockScaleY = 6*sin(clockScaleT);
plot(clockScaleX,clockScaleY,'rp');
%画出时钟的边框
clockEdgeT = 0:0.01:2*pi;
clockEdgeX1 = (6 + 0.3)*cos(clockEdgeT);
clockEdgeY1 = (6 + 0.3)*sin(clockEdgeT);
clockEdgeX2 = (6 + 0.3 + 0.2)*cos(clockEdgeT);
clockEdgeY2 = (6 + 0.3 + 0.2)*sin(clockEdgeT);
plot(clockEdgeX1,clockEdgeY1,'k',clockEdgeX2,clockEdgeY2,'k');
%画出秒针的初始位置
secondHandX = [0,0];
secondHandY = [0,4];
secondHandH = plot(secondHandX,secondHandY,'b','linewidth',2);
while(1)
rotate(secondHandH,[0,0,1],-6);
pause(1);
end
《 M A T L A B S Y N T A X 》 系 列 博 客 创 作 参 考 资 料 来 源 《MATLAB\ SYNTAX》系列博客创作参考资料来源 《MATLAB SYNTAX》系列博客创作参考资料来源
- 《自动控制原理实验教程》.巨林仓.西安交通大学出版社.
- 《MATLAB工程与科学绘图》.周博.薛世峰.清华大学出版社.
- 《MATLAB R2018a完全自学一本通》.刘浩.韩晶.电子工业出版社.
- 《科学计算与MATLAB语言》.刘卫国.蔡旭晖.吕格莉.何小贤.中国大学MOOC.
- 《MATLAB软件与基础数学实验》.李换琴.朱旭.王勇茂.籍万新.西安交通大学出版社.
- 《Matlab教程 - 图像处理》@正月点灯笼.https://www.bilibili.com.
- 《MATLAB从入门到秃头》@古德谓尔.https://www.bilibili.com.
博 客 创 作 : A i d e n L e e 博客创作:Aiden\ Lee 博客创作:Aiden Lee
特别声明:文章仅供学习参考,转载请注明出处,严禁盗用!
更多推荐
所有评论(0)