Вы запросили предложение о том, как сделать это по-другому, поэтому вот демонстрация простой 3D-анимации:
function q56758294
%% Generate some data
N_OBJS = 20;
P = rand(N_OBJS,3) .* ones(1,1,3);
%% Create the figure
figure();
hP(1) = plot3(P(:,1,1), P(:,2,1), P(:,3,1), 's', 'Color', [0 0 0]+0.8); hold on;
hP(2) = plot3(P(:,1,2), P(:,2,2), P(:,3,2), 's', 'Color', [0 0 0]+0.6);
hP(3) = plot3(P(:,1,3), P(:,2,3), P(:,3,3), 's', 'Color', [0 0 0]);
AX_LIMS = [-1 1]*3;
drawnow; set(gca, 'XLim', AX_LIMS, 'YLim', AX_LIMS, 'ZLim', AX_LIMS); grid on;
%% Animate:
FPS = 12;
for ind1 = 1:500
% Update coordinates:
dP = randn(N_OBJS,3)*0.1;
P(:,:,1) = P(:,:,2);
P(:,:,2) = P(:,:,3);
P(:,:,3) = P(:,:,3) + dP;
% Update plot objects:
for ind2 = 1:3
set( hP(ind2), 'XData', P(:,1,ind2), 'YData', P(:,2,ind2), 'ZData', P(:,3,ind2) );
end
pause(FPS^-1);
end
В результате:
Если вам нужны белые кружки на черном фоне, замените код создания фигуры следующим:
figure('Color', 'k');
hP(1) = plot3(P(:,1,1), P(:,2,1), P(:,3,1), '.', 'Color', [0 0 0]+0.2, 'MarkerSize', 20); hold on;
hP(2) = plot3(P(:,1,2), P(:,2,2), P(:,3,2), '.', 'Color', [0 0 0]+0.4, 'MarkerSize', 20);
hP(3) = plot3(P(:,1,3), P(:,2,3), P(:,3,3), '.', 'Color', [0 0 0]+1.0, 'MarkerSize', 20);
AX_LIMS = [-1 1]*3;
drawnow; set(gca, 'XLim', AX_LIMS, 'YLim', AX_LIMS, 'ZLim', AX_LIMS, 'Color', 'k',...
'XColor', 'k', 'YColor', 'k', 'ZColor', 'k');
В результате вы получите:
Чтобы экспортировать график в виде файла фильма, вам нужно будет использовать getframe
внутри цикла, а затем использовать VideoWriter
как объяснено в этом примере .
Кроме того, я добавил «следы» в эстетических целях, но их легко удалить, если они вам не нужны.