3.5 三维动画
MATLAB可以实现影片动画制作和实时动画制作.
影片动画预先制作图形,存储在图形缓冲区,然后逐帧播放.如果将MATLAB产生的多幅图形保存起来,利用系统提供的函数进行播放,就可以产生动画效果.MATLAB提供了3个函数用于捕捉和播放动画,分别为getframe函数、moviein函数和movie函数.
getframe函数可截取一幅画面信息(称为动画中的一帧),一幅画面信息形成一个很大的列向量.显然,保存n幅图面就需一个大矩阵.
moviein(n)函数用来建立一个足够大的n列矩阵.该矩阵用来保存n幅画面的数据,以备播放.之所以要事先建立一个大矩阵,是为了提高程序运行速度.
movie(m,n)函数播放由矩阵m所定义的画面n次,缺省时播放一次.
例3.23 绘制peaks函数曲面并且将它绕z轴旋转.
解:程序如下:
读者可以自行运行程序.运行结果如图3-27所示.
图3-27 多峰函数的动画
实时动画保持图形窗口中绝大部分的像素色彩不变,只更新部分像素色彩,从而构成运动图像.制作实时动画的基本方法是先画出初始图形,再计算活动对象的新位置,并在新位置上把它显示出来,擦除原位置上的原有对象,刷新屏幕.重复操作就可产生动画效果.
MATLAB中的EraseMode属性可以实现3种擦除方式:
①None:图形对象变化时,不做任何擦除,直接在原来图形上绘制.
②BackGround:图形对象被擦除后,原对象的颜色设为背景色,实现擦除.
③Xor:对象的绘制和擦除由该对象颜色与屏幕颜色来确定.只绘制与屏幕颜色不一致的新对象点,只擦除与屏幕颜色不一致的原对象点,而不损害被擦除对象下面的其他对象.
大多数MATLAB动画都采用第③种方式.
downnow命令是及时刷新屏幕的命令,可以使MATLAB暂停当前任务序列而去刷新屏幕.在实施动画时,为更新屏幕,需要使用downnow命令.
例3.24 模拟布朗运动.
解:程序如下:
读者可以自行运行程序.运行后的一个画面如图3-28所示.
图3-28 布朗运动动画
第3章练习题
1.绘制下列函数曲线:
(1),在x=0~2π区间.
(2)y=x3-7x2+14x-8,在x∈[0,5]区间取101点,y=0用虚线标出.
(3)-π≤t≤π,并在顶点处用黑色星号标出.
(4)在-5≤x≤5区间.
(5)笛卡儿叶形线:x3+y3-3xy=0.
(6).-2≤x≤2.
2.已知,y2=sin2x,y3=y1×y2,完成下列操作:(1)在同一坐标系下用不同的颜色和线型绘制三条曲线.
(2)以子图形式绘制三条曲线,要有标题.
(3)分别用条形图、阶梯形图、杆图和填充图绘制三条曲线.
3.绘制极坐标曲线ρ=acos(nθ+b),并分析参数a、b、n对曲线形状的影响.
4.某装饰材料公司以每桶2元的价钱购进一批彩漆.一般来说,随着彩漆售价的提高,预期销售量将减少,并对此进行了估算,见下表.
请画出彩漆售价与预期销售量之间的关系折线图,并在数据点用标记符号标注、坐标轴标注和图形名称标注.
5.用fplot函数在[-1,1]内用不同线型和颜色同时绘制两条曲线:y=e-0.5xcos(5x)和.
6.绘制下列函数的三维曲线图和曲面图.
(1)绘制三维曲线:x=sin(t);y=cos(t);z=tsin(t)cos(t);0≤t≤10π.
(2)用surf函数和mesh函数绘制三维曲面图:z=sin(x+sin(y))-x/10.
(3)在xOy平面内选择区域[-6,6]×[-6,6],绘制函数
带等高线和带底座的三维曲面图及三维等高线图.
7.某次考试优秀、良好、中等、及格和不及格的人数分别为11、13、24、12、7,分别用三维饼图和三维柱状图表示出各分数段所占的比例.
8.绘制下面两个三维曲面图形:半径为10的球面,以及边界为曲线y=1+x2,x∈[-1,1]的柱面.
9.绘制曲面图形,并将它绕z轴旋转.