Matlab for 循环动画
我正在尝试对函数的图形进行动画处理,但无法让程序绘制正确的点。我想绘制时间 0 到 10 之间的点并为该图设置动画。如何获得随时间变化的图?
clear;
w = 2*pi;
t = 0:.01:10;
y = sin(w*t);
x = cos(w*t);
for j=1:10
plot(x(6*j),y(6*j),'*');
axis square;
grid on;
F(j) = getframe;
end
movie(F,1,1);
我将代码改进为:
clear;
w = 2*pi;
for j=2:11
t=j-1;
y = sin(w*t);
x = cos(w*t);
plot(x(t),y(t),'*');
axis square;
grid on;
F(j) = getframe;
end
movie(F);
这应该可以完成我正在尝试的操作,但是现在我得到“索引超出矩阵维度”。我该如何解决这个问题?
I'm trying to animate the graph of a function but I cant get the program to graph the correct points. I want to plot points between time 0 and 10 and animate this graph. How do I get the plot as a function of time?
clear;
w = 2*pi;
t = 0:.01:10;
y = sin(w*t);
x = cos(w*t);
for j=1:10
plot(x(6*j),y(6*j),'*');
axis square;
grid on;
F(j) = getframe;
end
movie(F,1,1);
I refined the code to:
clear;
w = 2*pi;
for j=2:11
t=j-1;
y = sin(w*t);
x = cos(w*t);
plot(x(t),y(t),'*');
axis square;
grid on;
F(j) = getframe;
end
movie(F);
This should do what I'm trying however now I'm getting an "Index exceeds matrix dimension." How can I solve this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
下面的示例显示了录制 AVI 影片时沿圆形路径的动画点。
要了解有关在 MATLAB 中制作动画和录制电影的更多信息,请查看此指南。
Here is an example that show an animated point along a circular path, while recording an AVI movie.
To learn more about doing animations and recording movies in MATLAB, check out this guide.
它正在完全按照您的要求进行操作。您正在对
x
和y
进行二次采样,因此看起来有点有趣。尝试
我也会使用
t = 1 : 0.1 : 10;
以便它以 10 FPS 而不是 100 FPS 绘制。将频率降低到,比如说,w = pi;
也会更加顺利。归根结底,Matlab 并不是一个很好的动画解决方案。
回答精炼代码问题
您需要使用
plot(x,y);
,但这会显示另一个错误 - 您的帧索引不是从 1 开始。将在第一次迭代中因F(j)
而阻塞,其中j = 2
。为什么不直接循环t = 1 : 10
?It's doing exactly what you ask it to do. You're subsampling the
x
andy
, so it looks kind of funny.Try
I would also use
t = 1 : 0.1 : 10;
so that it plots at 10 FPS instead of 100. Slowing the frequency down to, say,w = pi;
will be smoother as well.At the end of the day, Matlab is just not a great animation solution.
Answer to refined code question
You'd need to use
plot(x,y);
, but this will reveal another error - your frame index does not start at 1. It will choke onF(j)
in the first iteration, wherej = 2
. Why not just loop overt = 1 : 10
?