matlab 如何用drawnow画正弦动画?

作者&投稿:璩华 (若有异议请与网页底部的电邮联系)
求用matlab制作简单动画实例~

具体制作方法如下:
1、首先,这里举例代码如下:
x=-8:0.5:8;
[XX,YY]=meshgrid(x);
r=sqrt(XX.^2+YY.^2)+eps;
Z=sin(r)./r;
surf(Z);
生成了一幅静态的surf图片,XX,YY由meshgrid生成。

2、下面输入
theAxes=axis;,
右侧可以看到,theAxes=[0,40,0,40,-0.5,1],这是surf函数生成的,因为上面绘制的surf没有使用surf(XX,YY,Z)所以坐标范围不同,但是无论什么坐标范围,这里都先取出来,存到一个变量中,后面备用。

3、fmat=moviein(20);
将fmat保存为一个moviein结构体,20表示动画有20帧。

4、输入:
for j=1:20;
surf(sin(2*pi*j/20)*Z,Z)
axis(theAxes)
fmat(:,j)=getframe;
end
这里就是分别画每一帧的图像,此处我们的surf是分20份来画,坐标轴统一为之前的保存的坐标轴,把moviein结构体fmat的取为getframe,如图。

5、movie(fmat,10);就是动画放10遍。

6、全代码如下:
x=-8:0.5:8;
[XX,YY]=meshgrid(x);
r=sqrt(XX.^2+YY.^2)+eps;
Z=sin(r)./r;
surf(Z);
theAxes=axis;
fmat=moviein(20);
for j=1:20;
surf(sin(2*pi*j/20)*Z,Z)
axis(theAxes)
fmat(:,j)=getframe;
end
movie(fmat,10)

t = 0:pi/100:2*pi;
y = exp(sin(t));
h = plot(t,y,'YDataSource','y');
for k = 1:0.01:10
y = exp(sin(t.*k));
refreshdata(h,'caller')
drawnow
end
满意请采纳,追问请加分!

题主的问题应该这样来修改:

h = animatedline;

x = linspace(0,4*pi,2000);

for k = 1:length(x)

    y = sin(x(k));

    addpoints(h,x(k),y);

    drawnow

end



length(x)一直是1,所以这段代码就是错的。我猜测你是要画一个正弦慢慢推进的动画,我给你提供一个简单的例子:
x=1:1000;
y=sin(2*pi*x/400);
figure
for t=1:1000
plot(x(1:t),y(1:t));
axis([0,1000,-1.5,1.5]);
pause(0.01);
end
上面这个例子比较笨,它需要plot不停地清空再重新渲染,你也可以使用matlab的animatedline对象来实现,巧了这个对象的matlab例程就是画sin函数动画的:
h = animatedline;
axis([0,4*pi,-1,1])
x = linspace(0,4*pi,1000);
y = sin(x);
for k = 1:length(x)
addpoints(h,x(k),y(k));
drawnow
end
顺便一提drawnow并不是画图的东西,drawnow用来更新图窗并处理回调的,这个drawnow限制了刷新图窗的帧率,所以看起来是在帮助形成动画,实际上你控制不了动画的速度,而plot并不需要drawnow来控制它的刷新,而animatedline需要手动刷新必须添加drawnow,所以使用pause更好,可以自由地控制动画的播放速度。


大冶市19586166324: 求助matlab绘制动画命令 -
夏帝关节: %这个我刚好知道 使用drawnow命令,如下有个例子:%擦除方式显示小球运动 speed=4000; x=linspace(0,2*pi,speed); y=tan(sin(x))-sin(tan(x)); plot(x,y); n=length(x); line_handle=line('LineStyle','o','LineWidth',3,'MarkerSize',15,...'EraseMode','...

大冶市19586166324: 如何用matlab让一个圆比如圆心为(1,0),半径为1的圆绕着原点(0,0)转动啊, -
夏帝关节:[答案] clear;clc h=ezplot('(x-1)^2+y^2=1'); axis equal manual; try while 1 rotate(h,[0 0 1],1,[0 0 0]); drawnow end end

大冶市19586166324: matlab画矩形运动,有帮助的追加!! -
夏帝关节: %用drawnow命令 for i=0:30 x=[0 3 3 0]+i*0.1;%四个顶点 y=[0 0 3 3]; %四个顶点 X=[x x(1)]; %首尾相接 Y=[y y(1)]; %首尾相接 plot(X,Y); axis([0 10 -5 5]) drawnow pause(0.1) %视觉暂留0.1秒 end

大冶市19586166324: 如何使用Matlab让一特定线段绕它的一端点旋转,使另一端点从一特定位置至另一特定位置? -
夏帝关节: p0=[-7.806,23.75,0]; %定点 p1=[-22.813,23.75,-50]; %动点第一位置 p2=[-60,23.75,0]; %动点第二位置 v1=p1-p0;l1=sqrt(sum(v1.^2)); %第一位置线段矢量,及其长度 v2=p2-p0;l2=sqrt(sum(v2.^2)); %第二位置线段矢量,及其长度 n=cross(v1/...

大冶市19586166324: matlab 图形变换 -
夏帝关节: x=linspace(-8,8,1001); y=sin(x); h=plot(x,y); grid on; for a=1:0.05:2 y=sin(a*x); set(h,'ydata',y); pause(0.1); drawnow; end

大冶市19586166324: 请问如何用Matlab画这样的图形: -
夏帝关节: P点的运动轨迹方程是 R=5; r=1; t=linspace(0,2*pi); x1=R*cos(t); y1=R*sin(t); x2=r*cos(t); y2=r*sin(t); x3=(R-r)*cos(t); y3=(R-r)*sin(t); x=(R-r)*cos(t)+r*cos(R/r*t-t); y=(R-r)*sin(t)-r*sin(R/r*t-t); plot(x1,y1,'k');hold on; h1=plot(x2+R-r,y2,'b-'); h2=plot(x(1),y(...

大冶市19586166324: 求用matlab制作简单动画实例 -
夏帝关节: 具体制作方法如下: 1、首先,这里举例代码如下: x=-8:0.5:8; [XX,YY]=meshgrid(x); r=sqrt(XX.^2+YY.^2)+eps; Z=sin(r)./r; surf(Z); 生成了一幅静态的surf图片,XX,YY由meshgrid生成. 2、下面输入 theAxes=axis;, 右侧可以看到,theAxes=[...

大冶市19586166324: matlab中drawnow什么意思 -
夏帝关节: 你好,我也是搞matlab的,以下是我的观点: 1、drawnow用于刷新屏幕的. 2、其实很多函数在执行的时候都需要调用它.

大冶市19586166324: 怎么用MATLAB不断读取一个不断变化的文件然后不断刷新画出图形 -
夏帝关节: 不停的重绘应该是个办法.动画一般可以这样实现.实时重绘的命令是drawnow,不过运行效率不是太好,非要动画的话可以考虑.

大冶市19586166324: 人工神经网络matlab问题 -
夏帝关节: 可以用drawnow;这个命令吧...比如:for a=1:25%训练次数 [net,Y,E]=adapt(net,P,T); %利用输入样本调节神经网net linehandle=plotpc(net.iw{1},net.b{1},linehandle); %画出调整以后的分类线 drawnow; end

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网