Матлаб анимация

В настоящее время я пытаюсь анимировать частицу в 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 

person user3532764    schedule 06.07.2014    source источник
comment
У тебя почти получилось. Позвольте мне написать ответ для вас.   -  person rayryeng    schedule 06.07.2014


Ответы (1)


У вас почти все правильно. Что вы можете сделать, так это поместить 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
comment
Большое спасибо! Я действительно благодарен!! - person user3532764; 06.07.2014
comment
@ user3532764 - Пожалуйста! Это сработало, как вы ожидали? - person rayryeng; 06.07.2014
comment
Почти в max(y) есть Y. Кроме того, нанесенные точки слишком малы, чтобы их можно было увидеть должным образом, можно ли их увеличить? Спасибо еще раз! - person user3532764; 06.07.2014
comment
@ user3532764 Ой! Это должно быть маленькое дело. Да, вы также можете изменить размер точки. Я только что изменил код. Посмотри. - person rayryeng; 07.07.2014