comet(プロット)の停止、再生、逆再生方法
現在この質問をフォロー中です
- フォローしているコンテンツ フィードに更新が表示されます。
- コミュニケーション基本設定に応じて電子メールを受け取ることができます。
エラーが発生しました
ページに変更が加えられたため、アクションを完了できません。ページを再度読み込み、更新された状態を確認してください。
古いコメントを表示
1 投票
matlabのプロットのタブにcometがあるのですが、このプロット方法は再生のような処理ができるのですが、停止や逆再生はできるのでしょうか。 また、cometではなくても別のもので上記の処理ができるものがありましたら教えていただけませんか。ちなみに三次元でcomet3(x,y,z)のように三次元で処理しています。
1 件のコメント
michio
2017 年 1 月 11 日
もしインタラクティブに(再生ボタン・停止ボタン・逆再生ボタンなどで)再生を操作したい場合は、GUIDE や App Designer で独自のGUIを作成するという方法もありますが、逆再生だけであれば KSSVさんが回答されているようにデータを逆順に並べて comet3 を実行するのもありですね。
採用された回答
comet にはユーザーが割り込んで停止させたり逆再生させたりする機能がついていないので、自分で作るしかありません。ドキュメンテーションに様々なサンプルとかがあるのでご覧下さい。
参考にまで、こういう感じでキーボードを使った操作をさせることができます。
function animExample(x,y,t)
% Example:
%
% t = -10*pi:pi/250:10*pi;
% x = (cos(2*t).^2).*sin(t);
% y = (sin(2*t).^2).*cos(t);
% animExample(x,y,t)
% キーボードでアニメーションを操作
figure('WindowKeyPressFcn',@animFrame)
% 空のグラフを作成
hLine = plot3(nan,nan,nan);
title('Press ← → ↑ ↓')
hFrameText = uicontrol('Style','Text','String','Frame:');
axis([min(x) max(x) min(y) max(y) min(t) max(t)])
frm = 1;
function animFrame(obj,eventdata)
% 矢印キーによってフレームを移動
switch eventdata.Key
case 'rightarrow' % 1 フレームずつ進む
frm = min(frm+1,length(t));
case 'leftarrow' % 1 フレームずつ戻る
frm = max(frm-1,1);
case 'uparrow' % 10 フレームずつ進む
frm = min(frm+10,length(t));
case 'downarrow' % 10 フレームずつ戻る
frm = max(frm-10,1);
end
% 表示データの更新
set(hLine,'XData',x(1:frm),'YData',y(1:frm),'ZData',t(1:frm))
% タイトルの更新
hFrameText.String = ['Frame: ', num2str(frm)];
end
end
上記の関数を作成し、コマンドウィンドウでこんな感じで実行してみて下さい。
t = -10*pi:pi/250:10*pi;
x = (cos(2*t).^2).*sin(t);
y = (sin(2*t).^2).*cos(t);
animExample(x,y,t)

%
9 件のコメント
masaki yamate
2017 年 1 月 11 日
編集済み: Jiro Doke
2017 年 1 月 11 日
function animExample(t,x,y)
% Example:
%
t = -10*pi:pi/250:10*pi;
x = (cos(2*t).^2).*sin(t);
y = (sin(2*t).^2).*cos(t);
animExample(t,x,y)
% キーボードでアニメーションを操作
figure('WindowKeyPressFcn',@animFrame)
% 空のグラフを作成
hLine = plot3(t,x,y);
title('Press ← → ↑ ↓');
hFrameText = uicontrol('Style','Text','String','Frame:');
axis([min(x) max(x) min(y) max(y) min(t) max(t)]);
frm = 100;
function animFrame(obj,eventdata)
% 矢印キーによってフレームを移動
switch eventdata.Key
case 'rightarrow' % 1 フレームずつ進む
frm = min(frm+1,length(t));
case 'leftarrow' % 1 フレームずつ戻る
frm = max(frm-1,1);
case 'uparrow' % 10 フレームずつ進む
frm = min(frm+10,length(t));
case 'downarrow' % 10 フレームずつ戻る
frm = max(frm-10,1);
end
% 表示データの更新
set(hLine,'XData',x(1:frm),'YData',y(1:frm),'ZData',t(1:frm))
% タイトルの更新
hFrameText.String = ['Frame: ', num2str(frm)];
end
end
実行したところ
→メモリが足りません。プログラム内で無限の再帰が発生していることが原因として考えられます。
という結果になってしまいました。
コメントを拝見してみますと、4行目~7行目の前の % 記号が抜けてます。その行はコメントなので % 記号を戻してください。
function animExample(t,x,y)
% Example:
%
t = -10*pi:pi/250:10*pi; <-- ここ
x = (cos(2*t).^2).*sin(t); <-- ここ
y = (sin(2*t).^2).*cos(t); <-- ここ
animExample(t,x,y) <-- ここ
ファイルを保存した後( animExample.m )、 コマンドウィンドウで 以下を実行します。
t = -10*pi:pi/250:10*pi;
x = (cos(2*t).^2).*sin(t);
y = (sin(2*t).^2).*cos(t);
animExample(t,x,y)
michio
2017 年 1 月 11 日
上記Jiroさんのコードをそのまま関数として animExample.m と保存した後に、コマンドウィンドウ上で
t = -10*pi:pi/250:10*pi;
x = (cos(2*t).^2).*sin(t);
y = (sin(2*t).^2).*cos(t);
animExample(x,y,t)
と実行してみてください。
masaki yamate
2017 年 1 月 11 日
丁寧に説明してくださり、ありがとうございます。心より感謝いたします。誠にありがとうございました。サンプルファイルで行った場合、アニメーションが実行出来ました。
いま、自分がアニメーションをしたいファイルに「t,x,y」の値を置き換えて実行しております。figureや軸はちゃんと表示されるのですが、線が表示されません。
今後も頑張ります。 ありがとうございました。
masaki yamate
2017 年 1 月 11 日
入力引数が不足しています。
エラー: animExample (line 47) hLine = plot3(t,x,y);
実行したときに、コマンドウィンドウに上記のものが表示されるのですが、これは無視してもいいのでしょうか。
masaki yamate
2017 年 1 月 11 日
Jiro Dokeさん 本当にありがとうございました。 望み通りのものができて大変感謝しております。
先ほど投稿した「入力引数が不足しています」の件ですが、こちらに関してはまだ解決しておりませんが、自分のデータに置き換えてアニメーションを作ることはできました。
Jiro Doke
2017 年 1 月 11 日
私が最初に投稿したコードには
hLine = plot3(t,x,y);
というコマンドはありませんが。もともと40行程度のコードなので47行目となっているのがわかりません。もう一度プログラムを確認して下さい。
masaki yamate
2017 年 1 月 11 日
解決できました。本当にありがとうございました。 感謝で頭が上がりません。orz
Jiro Doke
2017 年 1 月 11 日
助けになれて良かったです。
Accept ありがとうございました。
その他の回答 (0 件)
カテゴリ
ヘルプ センター および File Exchange で Programming についてさらに検索
製品
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
