我在1D中动画了N点的运动。问题是我无法找到摆脱之前情节的方法并删除动画中创建的曲目。
function sol=Draw(N)
%N is the number of points
PointsPos=1:N
for s=1:1000
for i=1:N
PointsPos(i)=PointsPos(i)+ rand(1,1)
%The position of the point is increased.
end
for i=1:N
%loop to draw the points after changing their positions
hold on
plot(PointsPos,1,'.')
end
pause(0.005)
%here I want to delete the plots of the previous frame s
end
end
答案 0 :(得分:1)
MATLAB程序动画的一般准则是:
避免在动画循环中尽可能多地创建或删除图形对象。
因此,如果您在动画循环中调用plot
image
surf
或delete
,那么很可能您没有以最佳方式执行此操作。
这里,最佳做法是在动画循环之前创建绘图,然后使用set(plot_handle,' XData',...)来更新绘图点的x坐标。
此外,您应该将兰特(1,N)添加到PointsPos
,而不是添加兰特(1,1)N次。
因此,您的代码看起来应该与以下内容类似:
function sol=Draw(N)
PointsPos=1:N
h = plot(PointsPos, ones(1, N), '.');
for s=1:1000
PointsPos=PointsPos+ rand(1,N)
set(h, 'XData', PointsPos);
pause(0.005)
end
end
答案 1 :(得分:0)
如果我了解你的目标,那么这应该做你想要的:
function sol = Draw(N)
steps = 1000;
% N is the number of points
PointsPos = cumsum([1:N; rand(steps-1,N)],1);
p = scatter(PointsPos(1,:),ones(N,1),[],(1:N).');
colormap lines
for s = 2:steps
p.XData = PointsPos(s,:);
drawnow
end
end
请注意: