首页 > 解决方案 > 在matlab中试图同时绘制多个轨迹

问题描述

我正在尝试绘制多个振荡器动画 wrt。时间,这样它们就会“同时”被激活,以便并排跟随它们。我可以分别绘制每个点,但我希望每个振荡器在动画中的各个点之间都有一条线连接。

事实证明这很困难,我尝试使用“addpoints(h,x,y,z)”(它适用于单个轨迹)但是每个连接在每个振荡器步骤之后自然会变得脱节,我对什么有点茫然尝试。

循环本身看起来像这样,t 是时间,osc 是振荡器编号,sin(y) 是每个振荡器在给定时间的位置。

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

这里 'k' 使它变黑 '-' 应该是一条线但被忽略了和 '.' 做点

并且“k-”同样被忽略。

标签: matlabanimationplot3d

解决方案


不确定我是否完全理解您的问题,但这会是一个解决方案吗?

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

有了这个简单的模型示例数据

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

它生成此输出(在它们运行时对其进行动画处理):

振荡器的 3D 图


推荐阅读