Matlab动画
我目前正试图在2D中根据一个颂歌系统来制作一个粒子的动画。我目前有下面的代码,基于在线示例,但我真的不知道如何继续 如果有人能提供帮助,我将不胜感激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,:)';
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哦!这应该是个小问题。是的,您也可以更改圆点的大小。我刚刚更改了密码。看一看。