我想绘制两个从内部相互切线的圆,然后较小的圆(内圆)在另一个表面上移动。我想在MATLAB中创建此功能,我的意思是绘制和移动圆圈:
image2.gif http://jwilson.coe.uga.edu/EMT668/EMT668.Folders.F97/Anderson/writeup6/image2.gif
我想在较大的一个表面上移动另一个较小的圆圈。
答案 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);