在 Matlab 中改变半径的球体 gif

gif of sphere with changing radius in Matlab

我希望根据与半径和时间相关的指定函数生成一个球体的 .gif 文件,该文件的大小(半径)随时间增长。我在如何制定动画方面遇到了一些麻烦。

这是我目前的情况:

%% Parameters 
dt = 0.05;
time = 0:dt:1;
radius = 1 
%% generate sphere
[X, Y, Z] = sphere(25);
X=X*radius;
Y=Y*radius;
Z=Z*radius;
mySphere = surf(X,Y,Z, 'FaceLighting','gouraud');
axis equal
shading interp
mySphere.FaceAlpha = 0.3
view([61 15])
colormap bone
hold on
%% generate gif 
filename = 'Sizechange.gif'; 
for n = 1:20 

    radius = 1 + time(n)
    im = frame2im(getframe(1));
    [imind,cm] = rgb2ind(im,256);

    if n == 1;
        imwrite(imind,cm,filename,'gif', 'Loopcount',inf,'DelayTime',dt);
    else
        imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',dt);
    end
end 

这里我试图让它以 0.05 的步长从半径 1 到半径 2。 然而,当我 运行 这个时,gif 仍然保持在 1 并且没有动画。

如有任何帮助,我们将不胜感激。

正如@cris-luengo 所说,您应该为半径上的每次迭代重新绘制球体。

%% Parameters
dt = 0.05;
time = 0:dt:1;
radius = 1 ;
%% generate sphere
[X, Y, Z] = sphere(25);
X=X*radius;
Y=Y*radius;
Z=Z*radius;
%figure;
%mySphere = surf(X,Y,Z, 'FaceLighting','gouraud');
% axis equal
% shading interp
% mySphere.FaceAlpha = 0.3;
% view([61 15])
% colormap bone
% hold on
%% generate gif
filename = 'Sizechange.gif';
figure;
for n = 1:20

    radius = 1+ time(n);
    %====================================================
    X=X*radius;
    Y=Y*radius;
    Z=Z*radius;
    mySphere = surf(X,Y,Z, 'FaceLighting','gouraud');
    axis equal
    shading interp
    mySphere.FaceAlpha = 0.3;
    view([61 15])
    colormap bone
    %====================================================
    im = frame2im(getframe(1));
    [imind,cm] = rgb2ind(im,256);

    if n == 1
        imwrite(imind,cm,filename,'gif', 'Loopcount',inf,'DelayTime',dt);
    else
        imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',dt);
    end
end