アニメーションの速度の制御について
40 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
下記リンクを参考にグラフ描画をアニメーションで指定した更新頻度で実行したいのですが上手くいきません。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 commentaires
Réponse acceptée
Takumi
le 13 Juil 2020
Modifié(e) : Takumi
le 13 Juil 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
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur グラフィックス パフォーマンス dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!