Как получить GIF из рисунка

Я сделал код ниже. Он создает нужные графы, которые я хочу преобразовать в GIF, однако эта часть не работает. Как я могу адаптировать его, чтобы GIF работал?

function []=cyclotron()
t=0:0.01:27;
dt=[diff(t),eps];
figure, hold on
[x1,y1,z1] = sphere ;
xnew1=x1;ynew1=y1;znew1= -abs(z1);
s=surf(xnew1,ynew1,znew1);
s.FaceColor="yellow";
k=1;
[x,~,z] = sphere ; 
x0 =0.05*x;z0= 0.05*z-0.95; cenx=mean(mean(x0));cenz=mean(mean(z0));
r=arrayfun(@(x,z)imag(sqrt(0.95^2+0.05^2-2*(dot([cenx,cenz],[x,z])))),x0,z0); 
[ir,on,de] = sphere;
view(3)
f = getframe;
[im,map] = rgb2ind(f.cdata,256,'nodither');
im(1,1,1,2700) = 0;
for T = t
    xnew2=r*cos(10*T)*sin(-1.3*1.15^(-T)+1.3); 
    ynew2=r*sin(10*T)*sin(-1.3*1.15^(-T)+1.3); 
    znew2=r*cos(-1.3*1.15^(-T)+1.3);
    g=mean(mean(xnew2));
    ry=mean(mean(ynew2));
    s=mean(mean(znew2));
    ir2=0.05*ir-g;
    on2=0.05*on-ry;de2=0.05*de-s;
    h=surf(ir2,on2,de2);
    h.FaceColor="black";
    alpha 0.3;
    view(3)
    pause(dt(k));
    f = getframe;
    im(:,:,1,k) = rgb2ind(f.cdata,map,'nodither');
    delete(h)
    k=+1;
end
imwrite(im,map,'cyclotron.gif','DelayTime',0,'LoopCount',inf)
end

Всего 1 ответ


Используйте функцию imwrite для создания анимированного GIF. Анимированный GIF содержит серию изображений, объединенных в один файл. За это:

  1. Нарисуйте серию сюжетов

  2. Захватите их как изображения

  3. Запишите их в файл GIF

Ваш текущий код необходимо будет изменить:

t=0:0.01:27;
dt=[diff(t),eps];
fig = figure; 
hold on
[x1,y1,z1] = sphere ;
xnew1=x1;ynew1=y1;znew1= -abs(z1);
s=surf(xnew1,ynew1,znew1);
s.FaceColor="yellow";
k=1;
[x,~,z] = sphere ; 
x0 =0.05*x;z0= 0.05*z-0.95; cenx=mean(mean(x0));cenz=mean(mean(z0));
r=arrayfun(@(x,z)imag(sqrt(0.95^2+0.05^2-2*(dot([cenx,cenz],[x,z])))),x0,z0); 
[ir,on,de] = sphere;
view(3)

% Capture the plot as an image 
frame = getframe(fig);
im = frame2im(frame);
[imind,cm] = rgb2ind(im,256);

% Write to the GIF File 
imwrite(imind,cm,'test1.gif','gif', 'Loopcount',inf); 


for T = t
    xnew2=r*cos(10*T)*sin(-1.3*1.15^(-T)+1.3); 
    ynew2=r*sin(10*T)*sin(-1.3*1.15^(-T)+1.3); 
    znew2=r*cos(-1.3*1.15^(-T)+1.3);
    g=mean(mean(xnew2));
    ry=mean(mean(ynew2));
    s=mean(mean(znew2));
    ir2=0.05*ir-g;
    on2=0.05*on-ry;de2=0.05*de-s;
    h=surf(ir2,on2,de2);
    h.FaceColor="black";
    alpha 0.3;
    view(3)
    pause(dt(k));
    % Capture the plot as an image 
    frame = getframe(fig);
    im = frame2im(frame);
    [imind,map] = rgb2ind(im,256);
    % Write to the GIF File 
    imwrite(imind,cm,filename,'gif','WriteMode','append'); 
    delete(h)
    k=+1;
end

Есть идеи?

10000