-
正弦波动画
先来画一个静态的正弦波图形 ,定义x的范围从-2*pi到2*pi,每0.1步画一个点
x = -2*pi : 0.1 : 2*pi;
计算出y的值
y = sin(x);
使用plot画出图形
plot(x,y);
x = -2*pi:0.1:2*pi;
y = sin(x);
plot(x,y);
那么要想波形动起来,x点要移动某个单位值,然后重新计算y的值,再将这些点重绘
先将绘制的点保存起来
h = plot(x,y);
x的值递增0.1并重新计算y的值
x = x+0.1;
y = sin(x);
将新的值重新设置好,使用set函数来实现
set(h,'XData',x,'YData',y);
然后调用drawnow命令来重绘窗口
drawnow;
最后得使用循环不停地执行上面的语句,实现波形动画效果
完整代码如下:
x = -2*pi:0.1:2*pi;
y = sin(x);
h = plot(x,y);
while true
x = x+0.1;
y = sin(x);
set(h,'XData',x,'YData',y);
drawnow;
end
-
螺旋弹簧动画
先来画一个静态的螺旋弹簧,定义一个theta的范围从-10*pi到10*pi,分别计算出x,y,z的值
theta = -10*pi:0.1:10*pi;
x = cos(theta);
y = sin(theta);
z = theta;
使用plot3函数画出图形
plot3(x,y,z);
theta = -10*pi:0.1:10*pi;
x = cos(theta);
y = sin(theta);
z = theta;
plot3(x,y,z);
如果想要让弹簧动起来,需要不停地压缩弹簧z轴及伸张z轴,先看压缩弹簧,假如将z軕每次压缩0.98,压缩前将plot3函数绘
制的点保存在h中
h = plot3(x,y,z);
使用循环压缩200次
for i=1:200
z = z*0.98;
set(h,'XData',x,'YData',y,'ZData',z);
drawnow;
end
完整代码如下:
theta = -10*pi:0.1:10*pi;
x = cos(theta);
y = sin(theta);
z = theta;
h = plot3(x,y,z);
for i=1:200
z = z*0.98;
set(h,'XData',x,'YData',y,'ZData',z);
drawnow;
end
会发现压缩时z轴的坐标也会发生改变,如何将这些坐标固定呢,使用axis函数,将6个点范围写进去,
x轴cos的取值范围是-1到1,y轴sin的取值范围是-1到1,z轴的取值范围是-10*pi到10*pi
axis([-1,1,-1,1,-10*pi,10*pi]);
theta = -10*pi:0.1:10*pi;
x = cos(theta);
y = sin(theta);
z = theta;
h = plot3(x,y,z);
axis([-1,1,-1,1,-10*pi,10*pi]);
for i=1:200
z = z*0.98;
set(h,'XData',x,'YData',y,'ZData',z);
drawnow;
end
压缩完后重新伸张开,只需要将z轴除以0.98即可
for i=1:200
z = z/0.98;
set(h,'XData',x,'YData',y,'ZData',z);
drawnow;
end
最后使用一个大循环while将压缩和伸张两部分一直执行下去,达到动画效果
最终代码如下:
theta = -10*pi:0.1:10*pi;
x = cos(theta);
y = sin(theta);
z = theta;
h = plot3(x,y,z);
axis([-1,1,-1,1,-10*pi,10*pi]);
while true
for i=1:200
z = z*0.98;
set(h,'XData',x,'YData',y,'ZData',z);
drawnow;
end
for i=1:200
z = z/0.98;
set(h,'XData',x,'YData',y,'ZData',z);
drawnow;
end
end
-
时钟效果动画
要实现时钟效果动画,首先画时钟圆框,也就是画一个圆形图
t的取值取0到2*pi,计算出x,y的值
t = 0:pi/50:2*pi;
x = cos(t);
y = sin(t);
plot(x,y);
t = 0:pi/50:2*pi;
x = cos(t);
y = sin(t);
plot(x,y);
上图的圆有点偏,那如何让它看起来比较圆呢,使用axis equal命令来实现
t = 0:pi/50:2*pi;
x = cos(t);
y = sin(t);
plot(x,y);
axis equal;
写指针,要从圆心开始画,画到圆边结束,定位两个点,圆心坐标是0,0,假定画到0,1这个位置,如何实现呢
先定义两个坐标点
LineX = [0,0];
LineX = [0,1];
plot(LineX ,LineY);
t = 0:pi/50:2*pi;
x = cos(t);
y = sin(t);
plot(x,y);
hold on;
axis equal;
LineX = [0,0];
LineY = [0,1];
plot(LineX,LineY);
要让指针动起来,每次都要改变一个角度,假定每次改变0.1,然后重新计算LineX第2个值和LineY第2个值
theta = 1;
theta = theta-0.01;
LineX(2) = cos(theta);
LineY(2)=sin(theta);
然后用set函数将新值设置回去,调用drawnow命令重绘,为了让动画持续下去,使用while循环让其一起运行
完整代码如下:
t = 0:pi/50:2*pi;
x = cos(t);
y = sin(t);
plot(x,y);
hold on;
axis equal;
LineX = [0,0];
LineY = [0,1];
h = plot(LineX,LineY);
theta = 1;
while true
theta = theta-0.1;
LineX(2) = cos(theta);
LineY(2) = sin(theta);
set(h,'XData',LineX,'YData',LineY);
drawnow;
end
来源:https://blog.csdn.net/mygod2008ok/article/details/100855010