工作需要在MATLAB中绘制质点轨迹并保存成GIF以便展示。

绘制质点轨迹动图可用comet和comet3命令,使用例子如下:

t = 0:.01:2*pi;
x = cos(2*t).*(cos(t).^2);
y = sin(2*t).*(sin(t).^2);
z = t;
comet(x,y,0.1);  %绘制二维
%comet3(x,y,z,0.1);  %绘制三维

这有一个问题在于comet或comet3无法控制绘制的动画的速度,为了实现这一点,一个可行的方法是重写comet和comet3,在每一个for循环中增加:

pause(interval)

其中interval可以是用户输入的每帧的时间间隔。

为了实现一边绘制动图,一边保存成GIF动画,我的实现方法是重写comet和comet3,具体如下:

在每个for循环的末尾增加:

frame = getframe(gcf);
im = frame2im(frame);
[imind,cm] = rgb2ind(im,256);
if GifImCount == 1;
imwrite(imind,cm,filename,'gif','DelayTime',interval, 'Loopcount',inf);
else
imwrite(imind,cm,filename,'gif','DelayTime',interval, 'WriteMode','append');
end
GifImCount = GifImCount + 1;

其中GifImCount在程序初始设为0,filename为要存储的gif文件的名称。原先for循环中的drawnow语句可以去掉,因为getframe本身就会调用drawnow函数。

但是这样有一个问题,就是这样只能获取当前帧的动画,尾迹消失了,即无法得到连续的动画效果。这个问题我初始想肯定是getframe里面某处擦除了图形,可以通过修改getframe来解决,但是还是没有解决。最后找到一个权宜之计,那就是重写comet和comet3函数时,不进行原先的body和tail的分别绘制,将comet和comet3中的“% Grow the body”和“% Clean up the tail”两部分去掉,只留“% Primary loop”部分,并稍做如下修改:

% Primary loop
for i = 1:m
set(head,'xdata',x(i),'ydata',y(i))
set(tail,'xdata',x(1:i),'ydata',y(1:i))
frame = getframe(gcf);
im = frame2im(frame);
[imind,cm] = rgb2ind(im,256);
if GifImCount == 1;
imwrite(imind,cm,filename,'gif','DelayTime',interval, 'Loopcount',inf);
else
imwrite(imind,cm,filename,'gif','DelayTime',interval, 'WriteMode','append');
end
GifImCount = GifImCount + 1;
end

大意是每次绘制都重绘从1到i的点。通过以上的修改,大致能够实现在MATLAB中绘制质点轨迹动图并保存成GIF的效果。

下面是效果:

如果你有更好的方法,请告知我,谢谢!

最新文章

  1. 【转】linux 定时执行shell脚本
  2. MUI 授权
  3. ZOJ 1048 Financial Management
  4. 【BZOJ】【2561】最小生成树
  5. vim 高级使用技巧第二篇
  6. Web前端开发:SQL Jsp小项目(二)------添加修改
  7. Unity3d Shader开发(三)Pass(Pass Tags,Name,BindChannels )
  8. css考核点整理(九)-有几种文字替换方式,之间的优缺点
  9. 一个简单的ajax对象
  10. 矩阵乘法的MPI并行计算
  11. UltraEdit for mac 3.2.0.10免费破解版下载!!
  12. MSBuild是什么?
  13. 初学jQuery之jQuery选择器
  14. chrome 浏览器最小字体为12px 的解决办法
  15. MySql单表最大8000W+ 之数据库遇瓶颈记
  16. Javascript中双等号(==)隐性转换机制
  17. php socket多进程简单服务器(一)
  18. python 利用matplotlib中imshow()函数绘图
  19. 线程池ThreadPoolExecutor整理
  20. unity2D动画和图片切割

热门文章

  1. Travis CI用来持续集成你的项目
  2. .NET Core RC2/RTM 明确了时间表
  3. JavaScript String对象
  4. [APUE]文件和目录(上)
  5. OpenCV人脸识别LBPH算法源码分析
  6. EF上下文对象线程内唯一性与优化
  7. MFC中成员变量的声明顺序与析构顺序
  8. 初探java中this的用法
  9. Mono 3.2.7发布,JIT和GC进一步改进
  10. Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器