就像是电影拍摄一样,MATLAB存储一系列图形,并将这些图像组成一个特殊的矩阵,由函数movie()播放
Z = peaks;
figure('Renderer','zbuffer');
surfc(Z);
axis tight manual;
set(gca,'NextPlot','replaceChildren');
for j = 1:20
surfc(sin(2*pi*j/20)*Z)
F(j) = getframe;
end
movie (F,20)
对于figure('Renderer','zbuffer')的解释,可以参考这一段:
figure的Renderer属性_了凡春秋_新浪博客 (sina.com.cn)
matlab使用zbuffer渲染设置或者OpenGL渲染设置(如果可用的话),而OpenGL渲染在显示动画时是更快的,但需要使用gouraud光照,而它没有使用Phong光照光滑,所以如果需要使用Phong光照的话,就要选择zbuffer渲染设置。
是一种对渲染器的设置。
axis tight manual;可以将坐标轴范围设置为等于数据范围,这样绘图可以扩展到坐标区边缘。
set(gca,'NextPlot','replaceChildren');语句中我们设置了坐标区的’nextPlot‘属性,这决定是否在绘制新图形之前添加、清除或清除并重置图窗和坐标区。
选择replaceChildren意味着,在添加新图形对象前移除所有未隐藏句柄的坐标区子对象,但不重置坐标区属性。
这样,当图中的曲线发生变化时,坐标轴就不会跟随变化。
最后,运用getframe和movie函数,我们就能看到动画了
正确运行的代码应当可以看到峰值来回震荡。
参考《高等光学仿真——光波导、激光》