【问题标题】:Matlab movie show 2 plotsMatlab电影放映2情节
【发布时间】:2012-12-02 19:05:20
【问题描述】:

我有一个 1001x2 的 y 矩阵,每列代表振荡器的相位角。我正在尝试制作一个 matlab 电影,以便我在时间 t 绘制两个相位角,一次绘制一个。所以基本上它应该看起来像 2 个点在圆周上移动。如果我坚持情节,那么它似乎是正确的,除了所有点都在框架上。但如果我不坚持,那么每次迭代中只会显示第二个图(每帧只有一个红色 *)。知道发生了什么事以及如何使两个点都显示在每一帧上?

fig1=figure(1);
winsize = get(fig1,'Position');
winsize(1:2) = [0 0];
numframes=100;
A=moviein(numframes,fig1,winsize);
set(fig1,'NextPlot','replacechildren')
i=1;

%hold on
for frame=1:numframes
i=frame*10;
plot(cos(mod(y(i),2*pi)),sin(mod(y(i),2*pi)),'bo');
plot(cos(mod(y(i,2),2*pi)) *1.1,sin(mod(y(i,2),2*pi))*1.15,'r*'); %only this one is shown
axis([-1.5 1.5 -1.5 1.5])
A(:,i)=getframe(fig1,winsize);
end 

【问题讨论】:

    标签: matlab movie matlab-figure


    【解决方案1】:

    好吧,你可以在画框期间hold on,在画框结束时hold off。喜欢

     for frame=1:numframes
     i=frame*10;
    
     plot(cos(mod(y(i),2*pi)),sin(mod(y(i),2*pi)),'bo');   
     hold on   % // here
     plot(cos(mod(y(i,2),2*pi)) *1.1,sin(mod(y(i,2),2*pi))*1.15,'r*');
     axis([-1.5 1.5 -1.5 1.5])
     A(:,i)=getframe(fig1,winsize);
     hold off  % // and here
     end 
    

    但在这种情况下你可以简单地做

     ....
     plot(cos(mod(y(i),2*pi)),sin(mod(y(i),2*pi)),'bo', ... 
         cos(mod(y(i,2),2*pi)) *1.1,sin(mod(y(i,2),2*pi))*1.15,'r*');
    

    【讨论】:

    • 在这里问问题之前试过了,但没有用。它只是显示好像我在循环之前做了hold on
    • 你必须把它放在两者之间......顺便说一句,第二种策略会奏效。您可能需要在帧之间添加sleep(.01)(便于视觉)或其他内容。
    • 是的,第二种策略确实奏效了。但我仍然不明白为什么第一个没有。有什么想法吗?
    • 因为hold onhold off 在循环过程中是按顺序运行的,因此它们彼此取消。并且只有状态 on,它首先被调用,才成立。
    • 好吧,现在我有任意(大量)列,所以使用第二种策略是不可行的。我想到的只是遍历所有列并绘制它们,同时坚持。但这需要类似于第一个策略的东西,但我看不到让它起作用。有什么想法吗?
    猜你喜欢
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    相关资源
    最近更新 更多