工作需要在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的效果。

下面是效果:

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

MATLAB中绘制质点轨迹动图并保存成GIF的更多相关文章

  1. 如何在 Matlab 中绘制带箭头的坐标系

    如何在 Matlab 中绘制带箭头的坐标系 如何在 Matlab 中绘制带箭头的坐标系 实现原理 演示效果 完整代码 实现原理 使用 matlab 的绘制函数时,默认设置为一个方框形的坐标系, 图1 ...

  2. R中绘制聚类的离散图

    R中利用cluster简单的绘制常见聚类离散图 # 引入cluster库(clara.fanny) library(cluster) # 聚类散点图绘制 # 引入factoextra,cluster库 ...

  3. 在github中的READEME中添加图片或者动图

    在github中reademe中添加动图或者图片 将你需要展示的图片放在这个项目中的某个文件夹中,然后再reademe中这样引入 ![maze](https://github.com/GainLoss ...

  4. Ubuntu10.04中利用V4L2读取摄像头数据并保存成文件【转】

    转自:http://blog.chinaunix.net/uid-29339876-id-4042245.html 利用V4L2读取UVC摄像头数据并保存成视频文件,主要参考http://linuxt ...

  5. matlab中,在灰度解剖图上叠加阈值图,by by DR. Rajeev Raizada

    1.参考 reference 1. tutorial主页:http://www.bcs.rochester.edu/people/raizada/fmri-matlab.htm. 2.speech_b ...

  6. MATLAB中绘制图形的时候,坐标和标题倒置

    1.如上图所示,直方图的坐标轴以及标题文字都颠倒了 原因: 在MATLAB显示的subplot函数中,图像与直方图这些不属于一类,所以在显示的时候会出现这种情况 解决办法:1>将图像与直方图分开 ...

  7. Matlab中使用Java api画图图形并保存为jpeg格式

    直接上代码: close all; import java.io.*; import java.awt.*; import java.awt.image.BufferedImage; import j ...

  8. Android 使用pl.droidsonroids.gif.GifImageView在安卓中显示动图遇到的问题

    在做一款聊天软件,其中聊天界面需要发送表情,而表情都是动图,在安卓中想要显示动图,就要借助第三方框架,我选的是pl.droidsonroids.gif.GifImageView. 使用方法如下:你在g ...

  9. matlab中subplot 在平铺位置创建坐标区

    来源:https://ww2.mathworks.cn/help/matlab/ref/subplot.html?searchHighlight=subplot&s_tid=doc_srcht ...

随机推荐

  1. Javascript生成二维码(QR)

    网络上已经有非常多的二维码编码和解码工具和代码,很多都是服务器端的,也就是说需要一台服务器才能提供二维码的生成.本着对服务器性能的考虑,这种小事情都让服务器去做,感觉对不住服务器,尤其是对于大流量的网 ...

  2. ExtJS 4.2 业务开发(三)数据添加和修改

    接上面的船舶管理业务,这里介绍添加和修改操作. 目录 1. 添加操作 2. 修改操作 3. 在线演示 1. 添加操作 1.1 创建AddShipWindow.js 在业务中的view目录下创建一个Ad ...

  3. redux-undo

    简介 通过包装reducer,创建一个state History,保留历史state,可以做退一步,进一步操作 1.install npm install --save redux-undo@beta ...

  4. Vue + Webpack + Vue-loader 系列教程(1)功能介绍篇

    原文地址:https://lvyongbo.gitbooks.io/vue-loader/content/ Vue-loader 是什么? vue-loader 是一个加载器,能把如下格式的 Vue ...

  5. HttpUrlConnection 基础使用

    From https://developer.android.com/reference/java/net/HttpURLConnection.html HttpUrlConnection: A UR ...

  6. git亲测命令

    一.Git新建本地分支与远程分支关联问题 git checkout -b branch_name origin/branch_name 或者 git branch --set-upstream bra ...

  7. [.NET] C# 知识回顾 - 委托 delegate (续)

    C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回 ...

  8. 【Machine Learning】Python开发工具:Anaconda+Sublime

    Python开发工具:Anaconda+Sublime 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现 ...

  9. [原] KVM 虚拟化原理探究(2)— QEMU启动过程

    KVM 虚拟化原理探究- QEMU启动过程 标签(空格分隔): KVM [TOC] 虚拟机启动过程 第一步,获取到kvm句柄 kvmfd = open("/dev/kvm", O_ ...

  10. [EasyUI美化换肤]更换EasyUi图标

    前言 本篇文章主要是记录一些换EasyUI皮肤的过程,备忘.也欢迎美工大神各路UI给点好意见,EasyUI我就不介绍了,自行百度吧..(So..所以别问我是不是响应式..本身EasyUI就不是响应式. ...