У вас почти все правильно. Что вы можете сделать, так это поместить plot
в цикл for
и построить каждую точку отдельно. Таким образом, вы сможете увидеть, как точка движется в более «реальном времени». Убедитесь, что в конце цикла for
добавьте drawnow
в конце итерации. Это заставляет MATLAB очистить очередь графических событий. Я также добавляю pause
в конце на случай, если рисунок будет идти слишком быстро.
Убедитесь, что у вас есть оператор hold on
в начале перед циклом for
. Я бы также рекомендовал заморозить ось, чтобы предотвратить автоматическое масштабирование оси при добавлении новой точки. Таким образом, ваш код будет изменен следующим образом:
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
. Если вы хотите, чтобы я сделал это для вас, дайте мне знать в комментарии, и я изменю свой пост.
Примечание
Этот пост был вдохновлен постом Луиса Мендо о построении объектов как анимации. Этот пост можно найти здесь: Октавные сюжетные точки как анимация
person
rayryeng
schedule
06.07.2014