アニメーションの速度の制御について

40 次查看(过去 30 天)
denpika
denpika 2020-7-13
评论: denpika 2020-7-16
下記リンクを参考にグラフ描画をアニメーションで指定した更新頻度で実行したいのですが上手くいきません。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 个评论
Kenta
Kenta 2020-7-13
编辑:Kenta 2020-7-13
animated lineをGIFで保存して、その時のdelay timeを調整したら、望む形のインターバルになりませんかね。上のURLのGIFの欄、お役に立てば嬉しいです。
denpika
denpika 2020-7-13
教えていただきありがとうございます。
GIFに保存すれば再生時間など調整できそうですが、MATLAB上でGUI的に動作をさせたい(パラメータ変更→データ観察したい)ので、実施したいこととは異なりました。
説明が不足していてすみませんでした。

请先登录,再进行评论。

采纳的回答

Takumi
Takumi 2020-7-13
编辑:Takumi 2020-7-13
大体の時間があっていれば良いなら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
  1 个评论
denpika
denpika 2020-7-16
3つの方法で教えていただきありがとうございました。
3つ目のTimerクラスを使う方法が最も実施したいことに合いました。
ミリ秒でずれることありますが、それほど長いデータを使わなければ十分でした。

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 グラフィックス パフォーマンス 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!