MATLAB的drawow不会刷新

时间:2015-04-29 16:05:25

标签: matlab

有没有理由说MATLAB的drawow不会刷新?

这是我的代码:

j=1;
for k = 1:length(P)
    for i = 1:n
        plot(P(k,j),P(k,j+1),'.');
        j = j+2;
    end
    axis equal
    axis([-L L -L L]);
    j=1;
    drawnow
end

rungekutta4是我自己编写的函数,它运行正常,所以问题不存在。)

粒子只是留在绘图上,每次循环执行时都不会被覆盖。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

执行此操作的正确有效方法是使用handle graphics。您还应该对plot命令进行矢量化。

% Example data to make runnable
L = 1;
n = 10; % Number of points
P = 2*rand(1e2,n+1)-1;

% Initialize plot, first iteration
h = plot(P(1,1:n),P(1,2:n+1),'.'); % Plot first set of points and return handle
axis equal;
axis([-L L -L L]);
hold on; % Ensure axis properties are fixed
drawnow;

% Animate
for k = 2:size(P,1) % size is safer in this case
    % Use handle to update the positions of the previously plotted points
    set(h,{'XData','YData'},{P(k,1:n),P(k,2:n+1)});
    drawnow;
    pause(0.1); % Slow down animation a bit to make visible
end

在动画的每次迭代中调用clf和/或plot会导致内存中的许多内容被不必要地删除和重新分配,从而导致代码速度变慢。在某些情况下,它也可能导致闪烁。

另见this very similar question and answer