Matlabでplotした波形をGIFアニメーションで保存する
今回はMatlabでプロットした波形をGIFアニメーションで保存する方法を紹介したいと思います。
こんなんネットの海にいくらでも転がっとるやろとか思ったんですが、説明の少ない公式のQ&Aとか英語の説明が多く、自分が使いたかったオプションの指定とかちょっと調べるのに手間取ったのでこちらにメモとしてまとめておきます。
基本的にこちらのQ&Aを参考にしました。
jp.mathworks.com
このページを参考に、自分がほしいなーと思ったオプションとかコメントを追加したコードがこちらです。
% 設定パラメータ%%%%%%%%%%%%%%%% hight = 400; % プロットするfigureの縦幅 width = 800; % プロットするfigureの横幅 sizen= 512; % rgb2ind()の関数でRGBイメージをインデックス付きイメージに変換する…らしい(よくわからん)。 % ただ、gifにアニメーションとして保存するサイズに対してこのsizeが小さいと"権限がない" % とかのエラーがでる。そうなったらこのsizeを大きくしてみよう。 delaytime = 0.5; % 画像を送る(更新する)間隔。単位は秒。つまり今回は0.5秒で切り替わる % プロット&保存 %%%%%%%%%%%%%%% h = figure('Position',[100 100 width hight]); axis tight manual % this ensures that getframe() returns a consistent size filename = 'testAnimated.gif'; % 保存する名前 for n = 1:0.5:10 % Draw plot for y = x.^n x = 0:0.01:1; y = x.^n; plot(x,y) drawnow % figureを更新する % Capture the plot as an image frame = getframe(h); im = frame2im(frame); [imind,cm] = rgb2ind(im,sizen); % Write to the GIF File if n == 1 imwrite(imind,cm,filename,'gif', 'Loopcount',inf,'DelayTime',delaytime); else imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',delaytime); end end
こいつらをまとめた関数とか作りたいですね。
このコードを書き直して倒立振子の制御の比較をしたのがこちらのGIFです。
スライディングモード制御についての解説とかも近い内に上げたいなあ。
GitHubにこのコードは乗っけておきます。