Matlab动画

Matlab动画,matlab,animation,frame-rate,ode,Matlab,Animation,Frame Rate,Ode,我目前正试图在2D中根据一个颂歌系统来制作一个粒子的动画。我目前有下面的代码,基于在线示例,但我真的不知道如何继续 如果有人能提供帮助,我将不胜感激 function Animation() % Solving the systemP1 using ode45 sol=ode45(@systemP1,[0,0.0001],[10e-7,-1,10e-7,-1]); t = linspace(0,0.0001) p = deval(sol,t); % Xposition x = p(1,:)';

我目前正试图在2D中根据一个颂歌系统来制作一个粒子的动画。我目前有下面的代码,基于在线示例,但我真的不知道如何继续

如果有人能提供帮助,我将不胜感激

function Animation()
% Solving the systemP1 using ode45
sol=ode45(@systemP1,[0,0.0001],[10e-7,-1,10e-7,-1]); 
t = linspace(0,0.0001)
p = deval(sol,t);
% Xposition
x = p(1,:)'; 
xdot = p(2,:)' ;
% Yposition
y = p(3,:)'; 
ydot = p(4,:)' ;
position = [x, y];
% Trajectory of the particle
path = plot(position(1,1), position(1,2),'k');



end 

你几乎说对了。您可以做的是将
绘图
置于
for
循环中,并分别绘制每个点。这样,您可以更“实时”地查看点的移动情况。确保在
for
循环结束时,在迭代结束时添加
drawnow
。它强制MATLAB清空图形事件队列。我还在末尾添加了
pause
,以防绘图速度过快

确保在
for
循环之前的开头有一个
hold-on
语句。我还建议冻结轴,以防止在添加新点时自动缩放轴。因此,您的代码将被修改为:

function Animation()
% Solving the systemP1 using ode45
sol=ode45(@systemP1,[0,0.0001],[10e-7,-1,10e-7,-1]); 
t = linspace(0,0.0001)
p = deval(sol,t);
% Xposition
x = p(1,:)'; 
xdot = p(2,:)' ;
% Yposition
y = p(3,:)'; 
ydot = p(4,:)' ;
position = [x, y];

%// Modifications start here
figure(1);
hold on;

%// Find limits of x and y axes
minX = min(x);
maxX = max(x);
minY = min(y);
maxY = max(y);

%// Prevent axis from auto-scaling
axis([minX maxX minY maxY]);
axis manual;

%//Plot each position vector over time
for idx = 1 : size(position,1)
    %//Trajectory of the particle
    plot(position(idx,1), position(idx,2),'k.', 'MarkerSize', 18);
    pause(0.1); %// Pause 0.1 seconds to slow things down. Remove if necessary
    drawnow;
end
end
MarkerSize
参数更改每个点的大小。我将它设置为18,因为它在我的机器上看起来足够大。根据你的喜好,把这个做大或做小。我不明白为什么要定义
xdot
ydot
,所以我把它从代码中去掉了。但是,如果您想使用这些,基本上可以复制我上面的代码,但是对于
xdot
ydot
。如果你想让我为你做这件事,请在评论中告诉我,我会修改我的帖子


这篇文章的灵感来自路易斯·门多(Luis Mendo)关于将对象绘制为动画的文章。你可以在这里找到这篇文章:

你差不多找到了。让我给你写一个答案。非常感谢!我真的很感激@用户3532764-非常欢迎!这是否如您预期的那样有效?几乎,max(Y)中有一个Y。另外,绘制的点太小,看不清楚,有没有办法使它们变大?再次感谢@用户3532764哦!这应该是个小问题。是的,您也可以更改圆点的大小。我刚刚更改了密码。看一看。