アニメーションの速度の制御について
    9 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    denpika
 el 13 de Jul. de 2020
  
    
    
    
    
    Comentada: denpika
 el 16 de Jul. de 2020
            下記リンクを参考にグラフ描画をアニメーションで指定した更新頻度で実行したいのですが上手くいきません。https://jp.mathworks.com/help/matlab/ref/animatedline.html
例えば、下記コードのようにT(0.02s)で計測したデータを
計測時間と同じように更新し12.56s(総計測時間)で再生を終えるようにしたいですが、
場合だと一瞬で描画が終わってしまいます。
また、再生時間を倍速(×0.5 ×2)する方法も教えていただきたく。
T = 1/50; % sampling rate 0.02s
h = animatedline;
axis([0,4*pi,-1,1])
x = 0:T:pi*4;
y = sin(x);
a = tic; % start timer
for k = 1:length(x)
    addpoints(h,x(k),y(k))
    b = toc(a); % check timer
    if b > T
        drawnow % update screen every T seconds
        a = tic; % reset timer after updating
    end
end
drawnow % draw final frame
2 comentarios
Respuesta aceptada
  Takumi
      
 el 13 de Jul. de 2020
        
      Editada: Takumi
      
 el 13 de Jul. de 2020
  
      大体の時間があっていれば良いならpause関数で停止させるのが簡単だと思います.ただし,関数を実行する時間を考慮していないので,ずれます.
T = 1/50; % sampling rate 0.02s
h = animatedline;
axis([0,4*pi,-1,1])
x = 0:T:pi*4;
y = sin(x);
tic
for k = 1:length(x)
    addpoints(h,x(k),y(k))
    drawnow
    pause(T)    % 再生時間を倍速にするにはTをT/2で置き換える
end
toc
それから,denpikaさんがやられている方法でやるならこんなかんじでしょうか.少し精度は上がりますが,まだ関数の実行時間を考慮していないところがあり,少しずれます.
T = 1/50; % sampling rate 0.02s
h = animatedline;
axis([0,4*pi,-1,1])
x = 0:T:pi*4;
y = sin(x);
k = 1;
tic     % 総実行時間測定用
a = tic;
while 1
    b = toc(a);
    if b>=T     % 再生時間を倍速にするにはTをT/2で置き換える
        addpoints(h,x(k),y(k))
        a = tic;
        drawnow
        k = k+1;
    end
    if k>length(x)
        break;
    end
end
toc
完全に合わせたいならTimerクラスを使うといいと思います.
global k
T = 1/50; % sampling rate 0.02s
h = animatedline;
axis([0,4*pi,-1,1])
x = 0:T:pi*4;
y = sin(x);
% timerクラス
tim = timer;
tim.TimerFcn = {@myTimerFunc,x,y,h};
tim.Period = T;     % 再生時間を倍速にするにはTをT/2で置き換える
tim.TasksToExecute = length(x);
tim.ExecutionMode = 'fixedRate';
k=1;
start(tim); % start timer
tic;
while 1
    if k>length(x)
        break;
    end
end
toc
function myTimerFunc(obj,event,x,y,h)
global k
addpoints(h,x(k),y(k));
drawnow
k=k+1;
end
Más respuestas (0)
Ver también
Categorías
				Más información sobre グラフィックス パフォーマンス en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

