В Matlab пытается построить несколько траекторий во времени одновременно - PullRequest
1 голос
/ 19 января 2020

Я пытаюсь построить несколько осцилляторов анимированных по отношению к. время, такое, что они анимированы «одновременно», чтобы следовать за ними рядом. Я могу построить каждую точку отдельно, но мне бы хотелось, чтобы у каждого осциллятора была линия, соединенная между соответствующей точкой в ​​анимации.

Это оказалось трудным, и я пытался использовать "addpoints (h, x , y, z) "(это работало для отдельных траекторий), но каждое соединение естественным образом становится разъединенным после каждого шага генератора, и я немного растерялся относительно того, что попробовать.

Сам l oop выглядит следующим образом: t - время, os c - номер генератора, а sin (y) - его позиция в данный момент времени для каждого генератора.

for t = 1:tlen
    for osc = 1:5
        plot3(t,osc,sin(y(osc,t)),'k.-')
        drawnow;
    end
end

Здесь «k» делает его черным » - «должен был быть строкой, но игнорируется и». делает точки

, а 'k-' также игнорируется.

1 Ответ

0 голосов
/ 20 января 2020

Не уверен, что я точно понял вашу проблему, но будет ли это решением?

Num_Oscillators = 5;
for t = 1:tlen
    figure(1);clf;
    for iOscillator = 1:Num_Oscillators
        plot3(1:t,iOscillator*ones(1,t),sin(y(iOscillator,1:t)),'k-.' );
        hold on;
    end
    drawnow;
end

Для этого необходимо записать y так, чтобы он мог взять целый вектор отсчетов времени и вернуть вектор осциллятора позиции (если это не может быть записано таким образом, вам нужно кэшировать ваши старые значения).

Если эта версия заставляет экран мерцать (это будет на более старых версиях Matlab), попробуйте вместо этого (это также может быть немного быстрее):

figure(1);clf;
Num_Oscillators = 5;
plot_handles = cell(1,Num_Oscillators);
for iOscillator = 1:Num_Oscillators
    plot_handles{iOscillator} = plot3(inf,inf,inf,'k.-');hold on;
end
for t = 1:tlen
    for iOscillator = 1:Num_Oscillators
        set(plot_handles{iOscillator},'XData',1:t,'YData',iOscillator*ones(1,t),'ZData',sin(y(iOscillator,1:t)));

    end
    drawnow;
end

С этим простым примером макета data

tlen = 100;
y = @(osc,t) 2*pi/tlen*osc*t;

генерирует эти выходные данные (анимируя их как они go):

3D plot of oscillators

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...