如何在MATLAB中绘制两个内部切圆的动画和动画?

时间:2014-06-24 18:58:14

标签: matlab animation

我想绘制两个从内部相互切线的圆,然后较小的圆(内圆)在另一个表面上移动。我想在MATLAB中创建此功能,我的意思是绘制和移动圆圈:

image2.gif http://jwilson.coe.uga.edu/EMT668/EMT668.Folders.F97/Anderson/writeup6/image2.gif

我想在较大的一个表面上移动另一个较小的圆圈。

1 个答案:

答案 0 :(得分:2)

你的意思是这样吗?

function M = circles(steps)
    figure
    M(steps) = struct('cdata', [], 'colormap', []);
    for i=1:steps
        phi = i*2*pi/steps;
        two_circles(4, 1, phi);
        M(i) = getframe;
    end
end

function two_circles(r1, r2, phi)
    d = r1-r2;
    circle(r1, 0, 0);
    axis square
    hold on
    circle(r2, d*sin(phi), d*cos(phi));
    hold off
end

function circle(r, x0, y0)
    t = 0:.01:2*pi;
    plot(x0+r*sin(t), y0+r*cos(t));
end

此代码绘制两个圆圈,然后动画,因为其中一个圆圈在另一个圆圈的表面上移动。

它还返回一个可以在movie函数中使用的帧数组:

M = circles(100);
movie(M, 10, 100);

或创建自己的gif image或视频文件。

以下是从frames数组创建gif文件的示例:

function frames_to_gif( filename, frames, delay )
    first = true;
    for frame = frames
          im = frame2im(frame);
          [imind, cm] = rgb2ind(im, 256);
          if first
              first = false;
              imwrite(imind, cm, filename, 'gif',
                  'Loopcount', inf,
                  'DelayTime', delay);
          else
              imwrite(imind, cm, filename, 'gif',
                  'WriteMode', 'append',
                  'DelayTime', delay);
          end
    end
end

这是我用它创建的gif文件:

frames_to_gif('circles.gif', M, 1/200);

circles.gif