comet(プロット)の停止、再生、逆再生方法
显示 更早的评论
matlabのプロットのタブにcometがあるのですが、このプロット方法は再生のような処理ができるのですが、停止や逆再生はできるのでしょうか。 また、cometではなくても別のもので上記の処理ができるものがありましたら教えていただけませんか。ちなみに三次元でcomet3(x,y,z)のように三次元で処理しています。
1 个评论
もしインタラクティブに(再生ボタン・停止ボタン・逆再生ボタンなどで)再生を操作したい場合は、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)
上記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)
と実行してみてください。
丁寧に説明してくださり、ありがとうございます。心より感謝いたします。誠にありがとうございました。サンプルファイルで行った場合、アニメーションが実行出来ました。
いま、自分がアニメーションをしたいファイルに「t,x,y」の値を置き換えて実行しております。figureや軸はちゃんと表示されるのですが、線が表示されません。
今後も頑張ります。 ありがとうございました。
入力引数が不足しています。
エラー: animExample (line 47) hLine = plot3(t,x,y);
実行したときに、コマンドウィンドウに上記のものが表示されるのですが、これは無視してもいいのでしょうか。
Jiro Dokeさん 本当にありがとうございました。 望み通りのものができて大変感謝しております。
先ほど投稿した「入力引数が不足しています」の件ですが、こちらに関してはまだ解決しておりませんが、自分のデータに置き換えてアニメーションを作ることはできました。
私が最初に投稿したコードには
hLine = plot3(t,x,y);
というコマンドはありませんが。もともと40行程度のコードなので47行目となっているのがわかりません。もう一度プログラムを確認して下さい。
解決できました。本当にありがとうございました。 感謝で頭が上がりません。orz
助けになれて良かったです。
Accept ありがとうございました。
更多回答(0 个)
类别
在 帮助中心 和 File Exchange 中查找有关 Programming 的更多信息
产品
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 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)
