精华内容
下载资源
问答
  • 使用Matlab制作动画-MATLAB_动画图_____作动态图.pdf Matlab制作动画的几种方法。
  • MATLAB制作动画

    2014-09-23 15:25:02
    MATLAB的关于制作视频动画的ppt,视频的读取,由图片转换成视频等等。
  • matlab 做动画

    2013-04-23 14:25:29
    这个程序表达的结果是用matlab做出动画效果或者电影效果
  • MATLAB时钟动画

    2018-08-25 20:29:45
    MATLAB的m脚本写的时钟动画。自动获取并追踪系统时间。里面有注释,主要是用了rotate和pause函数
  • MATLAB动画绘制

    万次阅读 多人点赞 2017-08-22 17:32:39
    Matlab动画制作 Matlab动画制作: 质点动画:最简单的动画产生方式,产生一个顺着曲线轨迹运动的质点来操作。 电影动画:首先保存一系列的图形,然后按照一定的顺序像电影一样的播放。 程序动画:在图形窗口中...

    Matlab动画制作

    Matlab的动画制作:

    质点动画:最简单的动画产生方式,产生一个顺着曲线轨迹运动的质点来操作。

    电影动画:首先保存一系列的图形,然后按照一定的顺序像电影一样的播放。

    程序动画:在图形窗口中按照一定的算法连续擦除和重绘图形对象。


    质点动画

    使用comet、comet3函数来产生质点动画,其步骤如下:

    step1:求解出质点完整的运动轨迹坐标x,y和z。

    step2:使用comet或者comet3直接绘制动点。

    函数cometcomet3调用格式

    调用格式

    说明

    comet(y)

    显示质点绕着向量y的动画轨迹(二维)

    comet(x, y)

    显示质点绕着向量y与x的动画轨迹(二维)

    comet(x, y, p)

    同上面的效果,但额外地定义轨迹尾巴线的长度p*length(y),

    其中p是介于0和1之间的数,默认为0.1


    实例:

    % 最简单的动画形式,使用comet、comet3函数
    % 产生一个顺着曲线轨迹运动的质点
     
    % step1:求解出质点完整的运动轨迹坐标x,y和z
    % step2:使用comet或者comet3直接绘制动点
     
    % 使用函数comet建立质点绕圆运动的动画
    clf;
    clear;
    %{
       linspace是Matlab中的一个指令,用于产生指定范围内的指定数量点数,相邻数据跨度相同,并返回一个行向量。
       调用方法:linspace(x1,x2,N)
       功     能:用于产生x1,x2之间的N点行矢量,相邻数据跨度相同。其中x1、x2、N分别为起始值、终止值、元素个数。若缺省N,默认点数为100。
       举例如下:X = linspace(5, 100, 20)   %  产生从5到100范围内的20个数据,相邻数据跨度相同
       X = 5 10 15 20 25 30 35 40 45 5055 60 65 70 75 80 85 90 95 100    ps:这和X = [5 : 5 : 100]的效果是一样的。
    %}
    % 圆周运动
    t = linspace(0, 2*pi, 10000);
    x = cos(t);
    y = sin(t);
    % 以便比较comet是否跟着轨迹走
    % plot(x, y);
    axis([-1, 1 -1, 1]);  axis square;
    hold on;  grid on;
    % comet(x, y, p);  p:定义轨迹尾巴的长度,范围在0-1之间,默认时为0.1
    comet(x, y, 0.03);


    % 平抛运动
    clf;
    clear;
    grid on;
    vx = 40;
    dt = linspace(0,10,1000);
    dx = vx*dt;
    dy = -9.8*dt.^2/2;
    comet(dx, dy);


    % 导弹发射
    clf;
    clear;
    grid on;
    vx = 100*cos(1/4*pi);
    vy = 100*sin(1/4*pi);
    t = 0:0.01:15;
    dx = vx*t;
    dy = vy*t-9.8*t.^2/2;
    comet(dx, dy);


    % 使用函数comet3建立质点绕圆运动的动画
    figure();
    grid on;
    tt = 0:pi/500:10*pi;
    plot3(sin(t),cos(t),t);
    comet3(sin(tt), cos(tt), tt, 0.5);



    电影动画

            1、调用moviein函数对内存进行初始化,创建一个足够大的矩阵,使之能够容纳基于当前坐标大小的一系列指定的图形(此处称为帧)。

            2、调用getframe函数生成每个帧。该函数返回一个列矢量,利用这个矢量,就可以创建一个电影动画矩阵。

            3、调用movie函数按照指定的速度进行指定次数播放该电影动画。例如:movie(M, n)可以播放由矩阵M所定义的画面n次,默认n时只播放一次。

            getframe函数和movie函数详解:getframe函数可以捕捉动画帧,并保存到矩阵中。该函数的主要格式有:

            1、f = getframe,从当前图形框中得到动画帧;

            2、f = getframe(h),从图形句柄h中得到动画帧;

            3、f = getframe(h,rect),从图形句柄h的指定区域rect中得到动画帧。

            当创建了一系列动画帧后,可利用movie函数播放这些动画帧。该函数的主要格式有:

            1、movie(M),将矩阵M中的动画帧播放一次;

            2、movie(M, n),将矩阵M中的动画帧播放n次

            3、movie(M, n, fps),将矩阵M中的动画帧以每秒fps帧的速度播放n次。


    电影动画程序的一般结构:

    % 记录电影
    for j = 1:n     % 旋转并记录每个画面
       Plot_command;           % 以绘画函数来产生动画
       M(j) = getframe;          % 抓取画面值
    end
    Movie(M);                        % 播放动画

    实例1:演示山峰函数绕Z轴旋转的动画。

    clc; clear;
     
    % peaks是一个函数,其中有2个变量。由平移和放缩高斯分布函数获得。
    % 参数为30,得到的X、Y、Z为30*30的矩阵。
    [X, Y, Z] = peaks(30);
    % surf绘制三维曲面图
    surf(X,Y,Z);
     
    axis([-3,3,-3,3,-10,10]);
    % 关闭所用坐标轴上的标记、格栅和单位标记。但保留由text和gtext设置的对象
    axis off;
    %{
       shading:是用来处理色彩效果的,分以下三种:
       1、no shading 一般的默认模式 即shading faceted
       2、shading flat 在faceted的基础上去掉图上的网格线
       3、shading interp 在flat的基础上进行色彩的插值处理,使色彩平滑过渡
    %}
    shading interp;
    %{
       colormap:设定和获取当前的色图。
       1、colormap(map):设置颜色图为矩阵map。如果map中的任何值在区间[0,1]之外,MATLAB返回错误。
       2、colormap('default'):将当前的颜色图设置为默认的颜色图。
       3、cmap=colormap:返回当前的颜色图。返回的值都在区间[0,1]内。
       map是一个3列矩阵,其元素数值定义在区间[0,1]。矩阵的每行元素表示1一个真色彩向量,即红、绿、蓝3基色的系数。
       hot为matlab中预定义的色图样式中的一种,表示:黑、红、黄、白色浓淡交错。
    %}
    colormap(hot);
     
    % 建立一个20列的大矩阵
    M = moviein(20);
    for i = 1:20
        % 改变视点
       view(-37.5+24*(i-1),30);
        % 将图形保存到M矩阵
       M(i) = getframe;
    end
    % 播放画面2次
    movie(M,2);


    实例2:动态展示plot画图

    clc; clear;
     
    % 初始化一个电影矩阵
    M = moviein(16);
    % 创建电影
    for k = 1:16
       plot(fft(eye(k+16)));
       axis equal;
        % 调用getframe函数生成每个帧
       M(k) = getframe;
    end
    % 调用movie函数将电影动画矩阵M(k)播放5次
    movie(M, 5);
     
     
    % 将前面创建的电影动画中添加一个垂直的滚动条
    h = uicontrol('style','slider','position',[10 50 20100],'Min',1,'Max',16,'Value',1);
    for k=1:16
       plot(fft(eye(k+16)));
       axis equal;
       set(h,'Value',k);
        % gcf为返回当前图形窗口句柄
       M(k) = getframe(gcf);
    end
    clf;
    axes('Position',[0 0 11]);
    movie(M,5);


    实例3:改变色彩矩阵,让影片展示从正片到负片的效果

    % 清除电影资料矩阵M
    clear M;
     
    % 加载图片文件,并画出
    load clown.mat;
    % 画出小丑图像
    image(X); colormap(map);
    % 抓取30个画面
    n = 30;
    scale = cos(linspace(0, 2*pi, n));
    fprintf('抓取画面中...\n');
     
    M = moviein(n);
    for i = 1:n
        % 改变色彩矩阵(让影片呈现出从正片到负片的效果)
       colormap(((i-1)*(1-map)+(n-i)*map)/n);
        % 抓取画面,并存入电影资料矩阵M
       M(i) = getframe;
    end
    fprintf('播放电影中...\n');
    % 播放电影5次(含正向与逆向播放)
    movie(M, -5);



    程序动画

            在MATLAB中,可以采用重绘图形对象的方法来创建程序动画。改变对象的方法可以触发MATLAB对该对象进行重绘。

            创建程序动画的典型步骤是:

            1、绘制一个图形对象;

            2、通过在一个程序循环中改变该对象的x,y和z坐标值来实现该对象的移动,从而形成动画。

            在创建MATLAB的程序动画时,图形擦除也是非常重要的。

            图形动态绘画中三种重要的擦除模式:(通过没置“EraseMode”属性来完成)

            1、None:在移动图形对象时,MATLAB不进行擦除;

            2、Background:在图形对象移走以后,MATLAB在原来的位置用背景色进行重绘。在这种模式下,MATLAB将原来的对象完全擦除,包括该对象下面的所有图形,如栅格线等;

            3、Xor:与Background模式相比,这种模式只擦除对象本身。大多数的MATLAB程序动画都采用这种擦除模式。


           目前新版本的Matlab已经不支持EraseMode属性了,坐标图的动画显示实现要依赖animatedline对象,配合drawnow函数使用。

            animatedline:创建动画行,使用的语法格式及说明如下:

            h = animatedline:创建一个没有数据的动画行,并将其添加到当前轴。在循环中添加点以创建线条动画。

            h = animatedline(x, y):创建由初始数据点x和y定义的动画线。

            h = animatedline(x, y, z):创建由初始数据点x、y和z定义的动画线。

            h = animatedline(___, Name, Value):使用一个或多个Name, Value对参数指定动画行属性。例如,'Color', 'r'将线条颜色设置为红色。需要在输入成对的参数组合之后使用此选项。

            h = animatedline(ax, ___):在轴指定的轴ax上创建动画线,而不是在当前轴gca中。如果不指定轴对象,则animatedline使用当前轴。

            如果有另一个函数想从当前图形中获得数据,用animatelinegetpoints方法:[xdata, ydata] = getpoints(h);


    animatedline动画线属性

            animatedline动画可以指定可选的逗号分隔的Name,Value参数对。 Name是参数名称,Value是相应的值。Name必须出现在单引号(' ')中。你可以按照任何顺序指定多个名称和值对参数Name1,Value1, ..., NameN, ValueN。

    常用的animatedline动画属性

    属性名称

    说明

    备注

    Color

    线条颜色

    线条颜色,指定为RGB三元组,或颜色名称的字符向量,或'none'。默认的RGB值[0 0 0]对应于黑色。若指定'none',那么该行不可见的。

    LineStyle

    线条样式

    '-':实线(默认);'--':虚线();'none':没有线

    ':':虚线() '-.':点划线();

    LineWidth

    线条宽度

    线宽,默认0.5。如果线条具有标记,则线宽也会影响标记边缘。

    Marker

    标记符号

    默认情况下,没有标记。指定标记符号会在每个数据点或顶点添加标记。

    MarkerSize

    标记大小

    标记大小,以点数表示为正值。(默认为6)

    MarkerEdgeColor

    标记边缘的颜色

    1、'auto':使用Color属性中指定的相同颜色。2、'none':不使用颜色,未填充的标记不可见。3、RGB三元组或颜色名称的字符向量。

    MarkerFaceColor

    标记内部的颜色

    1、'none':不使用颜色,这使内部看不见。2、'auto':使用与Color轴属性相同的颜色。3、RGB三元组或颜色名称的字符向量

    MaximumNumPoints

    存储和显示的最大点数

    动画行存储和显示的最大点数,指定为正值或Inf。默认值是百万。如果点数超过最大值,则动画行将保留最近添加的点,并从该行的起始处删除点。这些丢弃点不再显示,使用getpoints时不会返回。若指定为Inf,则动画行不会丢弃任何点,但存储的点数受限于可用内存量。


    颜色属性常用取值

    长名称

    简称

    RGB值

    说明

    'yellow'

    'y'

    [1 1 0]

    黄色

    'magenta'

    'm'

    [1 0 1]

    品红

    'cyan'

    'c'

    [0 1 1]

    青色

    'red'

    'r'

    [1 0 0]

    红色

    'green'

    'g'

    [0 1 0]

    绿色

    'blue'

    'b'

    [0 0 1]

    蓝色

    'white'

    'w'

    [1 1 1]

    白色

    'black'

    'k'

    [0 0 0]

    黑色


    标记符号取值

    描述

    描述

    'o'

    '^'

    上三角形

    '+'

    加号

    'v'

    下三角形

    '*'

    星号

    '>'

    右三角形

    '.'

    '<'

    左三角形

    'x'

    交叉

    'pentagram' or  'p'

    五角星

    'square'  or  's'

    矩形

    'hexagram'  or  'h'

    六角星

    'diamond'  or  'd'

    菱形

    'none'

    没有标记


    实例1:基本实现

    % 动态绘制椭圆
     
    % clf用来清除图形的命令。一般在画图之前用。
    clf;
    clc;
    axis([-2,2,-2,2]);
    % axis square 当前坐标系图形设置为方形,刻度范围不一定一样,但是一定是方形的。
    % axis equal 将横轴纵轴的定标系数设成相同值,即单位长度相同,刻度是等长的,但不一定是方形的。
    axis equal;
    grid on;
     
    h = animatedline('Marker', 'o', 'color', 'b', 'LineStyle', 'none');
    t = 6*pi*(0:0.02:1);
    for n = 1:length(t)
       addpoints(h,  2*cos(t(1:n)),sin(t(1:n)));
       
        % 一般是为了动态观察变化过程 pause(a)暂停a秒后执行下一条指令
       pause(0.05);
       
        % 可以用drawnow update加快动画速度
       drawnow update;
    end


    实例2:加快刷新速度

    % 加快刷新的技巧,每次循环中都只向结构体中增加一个点,实时显示的话有可能刷新速度跟不上
    % 所以可以考虑一次循环中向里面添加多个点,这样就可以加快刷新了
     
    h = animatedline;
    axis([0,4*pi,-1,1]);
     
    numpoints = 100000;
    x = linspace(0, 4*pi, numpoints);
    y = sin(x);
    for k = 1:100:numpoints-100
       xvec = x(k:k+99);
       yvec = y(k:k+99);
       addpoints(h,xvec,yvec);
       drawnow
    end
    


            实例3:控制动画的速度,有时候,希望动画显示的慢一点,上面介绍的都是加快动画的,如果要想控制动画速度,可以配合tic函数与toc函数,相当于一个记录程序运行的秒表,调用tic表示按一下开始计时,调用toc表示按一下结束及时,两个之间的时间差就是这一段程序运行的时间,下面这段代码表示控制帧速度在1000。

    h = animatedline;
    axis([0,4*pi,-1,1]);
    numpoints = 10000;
    x = linspace(0, 4*pi, numpoints);
    y = sin(x);
    % start timer
    a = tic;
    for k = 1:numpoints
       addpoints(h,x(k),y(k));
        %check timer
        b =toc(a);
        if b >(1/1000)
           % update screen every 1/1000 seconds
           drawnow;
           % reset timer after updating
           a = tic;
        end
    end

    实例4:

    A = [-8/3 0 0; 0 -10 10; 0 28 -1];
    y = [35 -10 -7]';
    h = 0.01;
     
    p = animatedline('color', 'g');
    axis([0 50 -25 25 -25 25])
    hold on; grid on;
     
    for i = 1:4000
       A(1,3) = y(2);
       A(3,1) = -y(2);
       ydot = A*y;
        y =y+h*ydot;
        % 更改坐标值
       addpoints(p, y(1), y(2), y(3));
       drawnow;
    end


    展开全文
  • Matlab绘制简单动画

    千次阅读 多人点赞 2020-03-01 21:37:53
    偶然间发现matlab很万能,平时用matlab做实验显得有点敷衍了,今天学习了一点简单动图的东西,语法很简单,实际就是要有深厚的数学功底哇! 一、运动的余弦函数 打开了matlab,新建文件animation1.m, 开始第一个...

    偶然间发现matlab很万能,平时用matlab做实验显得有点敷衍了,今天学习了一点做简单动图的东西,语法很简单,实际就是要有深厚的数学功底哇!


    一、运动的余弦函数

    打开了matlab,新建文件animation1.m, 开始第一个简单的练手工作,要想运动,就得先做一个余弦函数
    先定义其X的定义域,再令Y=sin(X);即可有如下效果

    X = -2*pi : 0.1 : 2*pi;
    Y = sin(X);
    plot(X,Y)
    

    在这里插入图片描述
    而我们要实现运动的效果,实际就是所有的点向右平移了,所有定义域就要发生改变,这里定义平移的尺度为0.1,对应的值也要发生相应改变,这里注意set的用法,它重新设定了新值,即把我们新的X,Y的值赋给h,而drawnow表示绘制这时候的图形

        X = X + 0.1; 
        Y = sin(X);
        set(h, 'XData', X, 'YData', Y);
        drawnow;
    

    这样我们就能得到一个平移了0.1的余弦图形了,怎么样才能一直平移呢,就是让他一直循环下去,利用while true即可实现

    while true
        X = X + 0.1;
        Y = sin(X);
        set(h, 'XData', X, 'YData', Y);
        drawnow;
    end
    

    一个移动的图就得到了。
    这里再提供一种更简单的方法。

    while true
        X = X + 0.1;
        Y = sin(X);
        plot(X,Y);
        getframe;
    end
    

    这里的getframe可以实现set的功能。

    在这里插入图片描述
    再注意一下,我们的代码停止运行的话会产生如下错误,但没有影响的。
    在这里插入图片描述
    这是由于我们关掉了窗口,绘制图形就识别不到了我们的参数,所有报错了。


    二、会动的弹簧

    同样我们先做一个不会动的弹簧,怎么做一个螺旋型的呢,就需要我们的两个方向的余弦,正弦函数,再绘制一个三维图即可,为了使弹簧形状更美观,这里设置了其坐标轴标度。

    theta = -10*pi : 0.1 : 10*pi;
    X = cos(theta);
    Y = sin(theta);
    Z = theta;
    
    plot3(X, Y, Z)axis( [-2, 2, -2, 2, -10*pi, 10*pi]);
    

    在这里插入图片描述
    注意一下这里的Z轴决定了它的高度。
    为了压缩,那就是要乘以一个系数就好,不停压缩的话就是不停乘以系数,给予合适的压缩次数,而要弹回来,那就要除以我们的系数,达到增大高度的目的。

    压缩弹簧

    for i = 1: 100
            Z = 0.98*Z;
            set(h, 'XData', X, 'YData', Y, 'ZData', Z);
            drawnow;
    end 
    

    弹回去

    for i = 1: 100
            Z = Z/0.98;
            set(h, 'XData', X, 'YData', Y, 'ZData', Z);
            drawnow;
    end 
    

    我们这里选定次数为100次,然后再用一个总的while true循环包括这两部分就可以实现我们的不停的跳动了。
    在这里插入图片描述
    一定要设定坐标轴固定,不然跳动的效果会受影响。


    三、会转的时钟

    做完两个是不是就已经套路是啥了呢,时钟就是确定原点为中心,画一个圆,一根会转的线,圆的话用我们的余弦函数就好了

    t = 0 : pi/50 : 2*pi;
    X = cos(t);
    Y = sin(t);
    plot(X,Y);
    hold on;
    axis equal;
    

    注意这里时间的划分,是pi/50,跨度越小,越接近于完美的圆,同时说明两个地方的用法(如果这里跨度取0.1的话,会看到圆的右侧有个缺口)
    hold on 帮助我们保持住我们的圆,不被我们后面要画的直线覆盖住
    axis equal 保持我们的两个坐标轴刻度相同,使圆更圆

    那我们接下来就是画线了,我们知道一条直线实际上就是一个向量,确定两个点就可以了,我们这里一个是原点,一个假定为(1,0),那我们就可以得到X轴上的线了

    lineX = [0 ,1];
    lineY = [0 ,0];
    h = plot(lineX, lineY);
    

    在这里插入图片描述
    那如何让这根线转动呢,那就是要将我们的(1,0)坐标换成很多个与角度有关的点就可以了

    theta = 0;
    while true
        theta = theta + 0.1;
        lineX(2)= cos(theta);
        lineY(2)= sin(theta);
        set(h, 'XData', lineX, 'YData', lineY);
        drawnow;
    end
    

    先令角度theta为0,然后慢慢增加,令坐标为cos(theta)和sin(theta)即可,其余按套路来即可。注意这里的矩阵表示法lineX(2)和lineY(2)都是表示第二个元素。
    效果图如下:
    在这里插入图片描述
    然后可以自己再加几根线上去,做成一个完整的时钟哦!


    四、密集的三维波形图

    这个图形密集恐惧症勿进哈!

    X = -10 : 0.2 : 10;
    Y = -10 : 0.2 : 10;
    
    [X,Y] = meshgrid(X,Y);
    
    Z = sin(X) + cos(Y);
    h = surf(X,Y,Z);
    axis([-10 , 10, -10, 10, -20, 20]);
    while true
        for i = 1 : 100
            Z = Z*0.97;
            set(h, 'XData',  X, 'YData', Y, 'Zdata',  Z);
            drawnow;
        end
    
        for i = 1 : 100
            Z = Z/0.97;
            set(h, 'XData',  X, 'YData', Y, 'Zdata',  Z);
            drawnow;
        end
    end
    

    在这里插入图片描述
    这里我们的meshgrid用来生成x,y平面即根据x y 生成网格得到坐标点集合(X, Y),surf用来绘制三个方向的图,其余和前面一样哦!可以先自己动手试试


    五、可以吃的曲奇饼

    话不多说,直接上饼来恰!

    R1 = 2;
    t = 0 : 0.1 : 10;
    
    for n = 1: length(t)
    theta = 0 : pi/50 : 2*pi;
    phi = 0 : pi/50 : 2*pi;
    [theta, phi] = meshgrid(theta, phi);
    
    R2= 1+ 0.2*cos(8*(phi-theta-t(n)));
    X = (R1 + R2.*cos(theta)).*cos(phi);
    Y = (R1 + R2.*cos(theta)).*sin(phi);
    Z = R2.*sin(theta);
    surf(X, Y, Z);
    axis equal;
    axis([-3.5, 3.5, -3.5, 3.5, -1.5, 1.5]);
    shading interp
    M(n) = getframe;
    end
    

    在这里插入图片描述
    提供一下思路:
    做一个圆,使其围绕Z轴旋转,但要注意不是规则的旋转,故肯定会有两个角度,这和我们建立球坐标系原理是一样的,主要是X,Y,Z的坐标如何设定,然后为了让他运动,就要改变它的R2,使其随时间变化即可!


    今天学完之后真开心!

    展开全文
  • MATLAB制作简单动画的方法

    万次阅读 2019-01-31 10:40:35
    Matlab实现动画形式主要有两种,一种是电影形式:将所有动画预存再像电影般地播放;另一种形式是对象形式:所有点所有曲线曲面均可以作为一个对象,不断抹去旧曲线,产生新曲线 1.先介绍一下第一种方式,电影法,...

    Matlab实现动画形式主要有两种,一种是电影形式:将所有动画预存再像电影般地播放;另一种形式是对象形式:所有点所有曲线曲面均可以作为一个对象,不断抹去旧曲线,产生新曲线

    1.先介绍一下第一种方式,电影法,也是常用的方法:

    %制作动画(这种方法很费内存)
    plot(1,ut(1),'b');
    axis([0 1000 3.3 4.2])%定义x轴(从0到100)和y轴的范围(从3.3到4.2)
    theAxes=axis;
    M=moviein(1000); %前面要有plot帮助moviein初始化
    for k=1:1000
    % plot(k,ut(k),'b');hold on;
    % plot(k,Usim(k),'r'); %这会实时在屏幕上绘制曲线动画
    %set(h,'xdata',k,'ydata',ut(k));
    axis(theAxes)%定义x轴(从0到100)和y轴的范围(从3.3到4.2)
    M(:,k)=getframe; %抓取图形作为电影的画面
    end
    movie(M,1,30);  %以每秒30帧的速度播放1次

    %2.进阶(用句柄画多个对象,占内存很小)
    X_MIN=1;
    X_MAX=14000; %指定显示点的个数
    Y_MIN=3.0;
    Y_MAX=4.2;
    % h1=line('color',[1,0,0],'marker','+','markersize',3);
    % h2=line('color',[0,0,1],'marker','o','markersize',3); %none保留旧的曲线的点,不做任何处理
    % set(h1,'EraseMode','none');
    % set(h2,'EraseMode','none');

    a1=line('Linestyle','-.','marker','+','Color',[1 0 0],'markersize',2,'EraseMode','none');
    a2=line('Linestyle','-','marker','o','Color',[0 0 1],'markersize',2,'EraseMode','none');
    a3=line('marker','s','Color',[0 1 0],'markersize',2,'EraseMode','none');
    axis([X_MIN X_MAX Y_MIN Y_MAX]);
    grid on
    hleg1= legend(gca, [a1 a2 a3], 'Measured', 'Model Predict1','Model Predict2', 0); %为两条曲线创建图例
    set(hleg1,'Box','on','position',[0.6,0.75,0.2,0.1]);
    set(get(gca,'Xlabel'),'String','Time(s)','FontName','Times New Roman','FontSize',10,...
    'FontWeight','bold','FontAngle','normal');%设置坐标轴刻度字体名称,大小
    set(get(gca,'Ylabel'),'String','Voltage(V)','FontName','Times New Roman','FontSize',10,...
    'FontWeight','bold','FontAngle','normal');%设置坐标轴刻度字体名称,大小

    for t=10:-1:1  %倒计时时间
        pause(1);
        fprintf('%d\r\n',t);
    end
    fprintf('ready\r\n');
    for i=X_MIN:X_MAX
        set(a1,'xdata',i,'ydata',ut(i));
        set(a2,'xdata',i,'ydata',Usim(i));   
        set(a3,'xdata',i,'ydata',Usim2(i));
        drawnow;
        %pause(01)
    end
    fprintf('finished!')

    %%
    %3.再次进阶,使用plot将上述动画保存成逐帧打印的(保存为AVI文件)
    aviobj=VideoWriter('compare.avi');%新建叫example.avi的文件
    open(aviobj); %打开example.avi的文件
    X_MAX=1400; %指定显示点的个数
    % pause(5);
    % fprintf('ready\r\n');
    for i=1:X_MAX
        plot(i,ut(i),'marker','+','markersize',3,'color',[1,0,0]);
        hold on;
        plot(i,Usim(i),'marker','o','markersize',3,'color',[0,0,1]);
        axis([0 X_MAX 3.0 4.2]);
        grid on
        drawnow;
        currFrame = getframe;
        writeVideo(aviobj,currFrame);
        %pause(01)
    end
    close(aviobj); %关闭
    fprintf('finished!\r\n');

    %%
    %保存为GIF文件
    filename='Curve_Compare4.gif';
    X_MAX=1000; %指定显示点的个数
    plot(1,ut(1),'marker','+','markersize',3,'color',[1,0,0]);
    hold on;
    plot(1,Usim(1),'marker','o','markersize',3,'color',[0,0,1]);   
    set(get(gca,'Xlabel'),'String','Time(s)','FontName','Times New Roman','FontSize',10,...
        'FontWeight','bold','FontAngle','normal');%设置坐标轴刻度字体名称,大小
    set(get(gca,'Ylabel'),'String','Voltage(V)','FontName','Times New Roman','FontSize',10,...
        'FontWeight','bold','FontAngle','normal');%设置坐标轴刻度字体名称,大小
    %set(gca,'position',[0.1 0.1 1 1]);
    for i=1:X_MAX
        plot(i,ut(i),'marker','+','markersize',3,'color',[1,0,0]);
        hold on;
        plot(i,Usim(i),'marker','o','markersize',3,'color',[0,0,1]);
        axis([0 X_MAX 3.0 4.2]);
        grid on
        drawnow;
        f=getframe(gcf);  
        imind=frame2im(f);
        [imind,cm] = rgb2ind(imind,256);
        if i == 1
            imwrite(imind,cm,filename,'gif', 'Loopcount',1,'DelayTime',0); %0用最快的速度
        else
            imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',0);
        end
        %pause(01)
    end
    fprintf('finished!\r\n');
    close(gcf)
    %%
    %转成avi
    X_MAX=100; %指定显示点的个数
    plot(1,ut(1),'marker','+','markersize',3,'color',[1,0,0]);
    hold on;
    plot(1,Usim(1),'marker','o','markersize',3,'color',[0,0,1]);   
    set(get(gca,'Xlabel'),'String','Time(s)','FontName','Times New Roman','FontSize',10,...
        'FontWeight','bold','FontAngle','normal');%设置坐标轴刻度字体名称,大小
    set(get(gca,'Ylabel'),'String','Voltage(V)','FontName','Times New Roman','FontSize',10,...
        'FontWeight','bold','FontAngle','normal');%设置坐标轴刻度字体名称,大小
    %set(gca,'position',[0.1 0.1 1 1]);
    MOV=moviein(X_MAX);
    for i=1:X_MAX
        plot(i,ut(i),'marker','+','markersize',3,'color',[1,0,0]);
        hold on;
        plot(i,Usim(i),'marker','o','markersize',3,'color',[0,0,1]);
        axis([0 X_MAX 3.0 4.2]);
        grid on
        drawnow;  
        MOV(i)=getframe(gcf);
        %pause(01)
    end
    movie2avi(MOV, 'mytest.avi','compression','None','FPS',60);
    fprintf('finished!\r\n');
    close(gcf)

    %%
    %4.这个是摘抄的例子实现了坐标轴移动+avi视频
    aviobj=VideoWriter('example3.avi');%新建叫example.avi的文件
    open(aviobj); %打开example.avi的文件
    t=[0]
    m=sin(t)
    p = plot(t,m,'EraseMode','background','MarkerSize',5);
    x=-1.5*pi;
    axis([x x+2*pi -1.5 1.5]);
    grid on;
    for i=1:100
        t=[t 0.1*i];
        m=[m sin(0.1*i)];
        set(p,'XData',t,'YData',m)
        drawnow
        x=x+0.1;
        axis([x x+2*pi -1.5 1.5]);
        pause(0.01); %最快速度是10帧/s,即使注释掉这句
        currFrame = getframe;
        writeVideo(aviobj,currFrame);
    end
    close(aviobj); %关闭
    fprintf('finished!')

    %%
    %5.新的技术animatedline出错??????animatedline是2014b引入的函数
    a1 = animatedline('Color',[0 .7 .7]);
    a2 = animatedline('Color',[0 .5 .5]);

    axis([0 20 -1 1])
    x = linspace(0,20,10000);
    for k = 1:length(x);
        % first line
        xk = x(k);
        ysin = sin(xk);
        addpoints(a1,xk,ysin);

        % second line
        ycos = cos(xk);
        addpoints(a2,xk,ycos);

        % update screen
        drawnow limitrate
    end

     

     

    展开全文
  • 如何用MATLAB制作GIF动画

    千次阅读 2019-05-22 21:49:53
    今天,给大家分享一个如何用MATLAB制作GIF动画,不仅简单实用体积小,GIF动画的效果还很精致。其中涉及到了很多MATLAB编程的一些基础知识,比如for语句、while循环以及涉及到图像处理的函数语法,我都作了详细的...

    相信大家平时制作PPT时,通常会需要一些GIF加以修饰或者辅助说明。但是又苦于不会用视频剪辑软件或者制作的质量不够完美。今天,给大家分享一个如何用MATLAB来制作GIF动画,不仅简单实用体积小,GIF动画的效果还很精致。其中涉及到了很多MATLAB编程的一些基础知识,比如for语句、while循环以及涉及到图像处理的函数语法,我都作了详细的注释。相信在给大家带来干货分享的同时,也会加深大家对编程基础知识的理解和对编程的认识。

    1.分解视频所有帧

    这步操作,主要是将视频所有帧的图像读取出来,并且按照序号进行保存
    (如果视频比较大的话,大家可以根据实际情况,对for循环进行修改读取和保存相应的部分),方便大家根据图片的序号查找视频中想要节选的片段。

    // An highlighted block
    video = VideoReader('video_eg.mp4'); %读取视频
    nFrames = video.NumberOfFrames; %获取视频帧数
    % H = video.Height;     %得到高度
    % W = video.Width;      %得到宽度
    
    %read one frame every time
    for i = 1:nFrames
      mov = read(video,i);  %读取视频的每一帧
      name = strcat('mov_',int2str(i),'.jpg'); %给每一帧命名
      imwrite(mov,name);  %保存每一帧图像
      pause(0.0001) %暂停
    end
    
    2.鼠标手动裁剪

    为了更精准地满足对GIF制作的需求,视频的整个界面中有可能有很多多余的部分,这是我们需要对视频屏幕区进行选取,用鼠标画出矩阵区域裁剪我们想要的部分。

    %% ==== 选取鼠标手动裁剪选定的gif区域
    start  = 130; %设置初始帧
    stepall = 203; %设置终止帧
    step1 = 1; %GIF动画帧间隔
    name = strcat('mov_',int2str(start),'.jpg'); %帧名
    gif_img = imread(name);  
    [b,r] = imcrop(gif_img); %裁剪函数裁剪图像
    

    这是我从抖音上随便下载了一个小视频作为素材,想要将两个小孩子拥抱的镜头加个特写制作出一个GIF动画。如图所选区域就是两个小孩即将拥抱的镜头所在区域。鼠标选中之后,双击。
    在这里插入图片描述

    3.制作GIF动画

    接下来便对上一步中,所选择的帧图像序号,进行合成制作GIF动画了。这里我选择的起始和终止序号分别是130,203,大家根据自己实际情况做修改即可。

    //
    i = start;
    while(i <= stepall)
          
     name = strcat('mov_',int2str(i),'.jpg');
    
        b = imread(name);
        gif_img = imresize(b,1); %把图像放大*倍
        gif_img=imcrop(gif_img,r);%交互式裁剪
        
        [I,map] = rgb2ind(gif_img,128);  %索引图像        
        if i == start
            imwrite(I,map,'New.gif','gif', 'Loopcount',inf,'DelayTime',0.000001); 
        elseif i == stepall
            imwrite(I,map,'New.gif','gif','WriteMode','append','DelayTime',0.000001);
        else
            imwrite(I,map,'New.gif','gif','WriteMode','append','DelayTime',0.000001);
        end
      i= i+step1;
    end
    

    效果图如下:在这里插入图片描述

    扫描下方二维码关注我的微信公众号:阿不小奇谈
    想要获取本视频素材以及源码,在公众号后台发送:GIF
    在这里插入图片描述
    或者直接加我的个人微信:Abox_0226
    在这里插入图片描述

    展开全文
  • 把短视频分开成一帧一帧的,然后再挑出帧组合成了gif图片
  • Matlab制作动画涉及的主要问题.ppt
  • matlab绘制动画保存

    千次阅读 2020-01-16 16:49:20
    本文转载于...1.sin(x)动画方式 clear all h = animatedline;%动画线 axis([0 4*pi -1 1]) box on x = linspace(0,4*pi,200); for k = 1:length(x) y = sin(x(k)); ...
  • matlab动画制作详解

    万次阅读 2017-12-10 10:47:40
    有时,我们不仅需要绘图,还需要制作一些动态视频和动画,下面就来介绍一些matlab制作动画和视频常用的函数,并举出一些实例。 一.animatedline animatedline函数可以帮助对线条动画进行优化,允许用户在不重新...
  • matlab 绘图与动画制作

    千次阅读 2020-03-02 12:58:49
    目录一、MATLAB常用绘图函数plot() 函数surf() 函数ezplot() 函数二、动画绘制原理三、举个栗子 一、MATLAB常用绘图函数 plot() 函数   plot() 函数用来绘制二维曲线,调用方法如下: plot(x, y) plot(x,...
  • 通过使用 Simulink 3D Animation API,我们可以从 MATLAB制作涡轮机的简单动画。 VRML 中的叶片几何建模也可能引起航空航天工程师的兴趣。 请注意,运行该演示需要Simulink 3D动画。 有关如何从头开始构建的...
  • Matlab动画的实现、制作和保存

    万次阅读 多人点赞 2018-04-25 15:07:39
    本帖由Matlab技术论坛原创,原帖参见 http://www.matlabsky.com/thread-592-1-1.html光学夫朗和费衍射现象模拟Matlab源代码http://www.matlabsky.com/thread-363-1-1.htmlMatlab中动画制作和实现...
  • 以植物大战僵尸图片为例,首先找到背景图片、植物、僵尸;...cd D:\MATLAB\MATLAB\植物大战僵尸 %% 第一存储背景 %% 选择需要处理的图形文件 [filename,pathname,FilterIndex]=uigetfile(... {'*.*', '所有文件(*.*)-
  • MATLAB的简单动画制作

    万次阅读 2017-01-13 16:57:15
    这里介绍两种类型的动画实现,一种使用getframe和movie命令实现帧动画,另一种使用comet(comet3)命令实现画图过程的动画. ①getframe和movie命令实现帧动画  例如,创建一个动画,实现y=ln x,y=x,y=exp(x)的图像...
  • MATLAB如何制作动画(动态图形演示movie) 听语音 | 浏览:7100 | 更新:2017-12-10 10:57 | 标签:MATLAB动画 1 2 3 4 5 6 7 分步...
  • matlab动画制作思路

    2020-11-29 10:02:56
    matlab动画采用每帧播放的策略 1、首先将不变的部分初始化为背景 plot(背景) backGround=gcf; 若背景会在后续发生变化,设个临时变量 picTemp=backGround; 2、变化修改的部分设置在循环里面 for。。。 ...
  • matlab实现动画的五种方法总结,供大家相互交流学习总结。
  • matlab的四连杆问题动画制作,适合初学者使用matlab的四连杆问题动画制作,适合初学者使用
  • 下雪动画matlab制作

    2016-10-11 11:02:47
    下雪动画matlab制作,简单有趣
  • 使用matlab制作动画

    千次阅读 2014-04-20 00:55:36
    制作PPT时经常需要使用一些动画,尤其是将程序的运行结果动态地表现出来,下面提供三种方法。 1.使用comet、comet3函数 comet与comet3函数其实反映的是运动轨迹图,comet3是三维图形。 example for ...
  • MATLAB动画制作

    2010-05-07 10:17:19
    你想学电话吗?亲下载他,会对你有用的。亲下吧
  • Matlab 动画及Gif生成

    千次阅读 2016-12-02 12:14:43
    Matlab动画及Gif图片生成
  • Matlab制作gif格式动画以其小巧受到大家的广泛欢迎,本贴以案例形式一个总结。祝大家学习愉快。
  • 第五讲 Matlab动画技术参考文献:基于Matlab的计算机图形与动画技术于万波 编著清华大学出版社2007一动画制作方法 Matlab提供了许多与动画制作相关的函数能够比较容易完成动画制作一时间函数1. Timer 函数可以使用...
  • MATLAB动画,单摆摆动的物理过程,可以看到动画,速度加速度的变化,还能改变初始条件
  • 利用matlab制作光栅动画(莫尔条纹动画

    千次阅读 多人点赞 2019-12-05 22:05:15
    利用matlab制作光栅动画(莫尔条纹动画)1原理2 预期动画准备3 底片绘制4 光栅动画 光栅动画是一种利用一种透明光栅在底片上快速移动,使得看起来底片像是运动的一种动画方式。这种动画不依赖于电子媒体以及gif图,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,701
精华内容 1,480
关键字:

matlab制作动画

matlab 订阅