matlab如何制作振型动画_matlab简单动画制作(1)

本文介绍了在MATLAB中如何制作振型动画,通过一个简单的三角函数图形例子,展示了如何绘制并让图像动起来。文章提到了使用getframe、VideoWriter、pause和Imwrite函数来实现动画的创建和保存,最后提供了完整代码示例。
摘要由CSDN通过智能技术生成

343ffbf2ff9ada51b5540a36d4e4fe5c.gif

此动画来源于https://zhuanlan.zhihu.com/p/86152912。

我们不得不承认一个事实

                 千言万语比不过一个图表具有说服力                  一个动态的图表可以代替多个图表

下面我们将从做一个简单的三角函数图形开始说起:这里假设您已具备做简单图像,看懂简单代码的能力。

clear allclcx = 0:0.01:5*pi;y = sin(x);z = cos(x);plot(x,y,'r-','linewidth',2)hold onplot(x,z,'b-','linewidth',2)legend('sin(x)','cos(x)')xlabel('x')ylabel('y/z')set(gca,'fontsize',18)axis([0 16 -1.1 1.1])

599d925603cf2ef54a8094b32e181908.png

以上代码就实现了同一张图同时绘制正弦与余弦的函数图像。那么接下来就要让我们的图像动起来。看一下效果吧!

clear allclc;clfx = 0:0.05:5*pi;y = sin(x);z = cos(x);subplot(211)plot(x,y,'r-','linewidth',2)hold onplot(x,z,'b-','linewidth',2)legend('sin(x)','cos(x)')xlabel('x')ylabel('y/z')set(gca,'fontsize',18)axis([0 16 -1.1 1.1])subplot(212)for ii = 1:length(x)    plot(x(1:ii),y(1:ii),'r-o','linewidth',2)    hold on    plot(x(1:ii),z(1:ii),'b-^','linewidth',2)        legend('sin(x)','cos(x)')    xlabel('x')    ylabel('y/z')    set(gca,'fontsize',18)    axis([0 16 -1.1 1.1])    xlabel('x')    ylabel('y/z')    set(gca,'fontsize',18)    axis([0 16 -1.1 1.1])    %     pause(0.001)    drawnowend

那么怎么保存为视频或者gif格式呢?

准备工作:

 1 getframe函数

% getframe函数
F = getframe
F = getframe(ax)
F = getframe(fig)
F = getframe(___,rect)

2 VideoWriter函数

v = VideoWriter(filename)
v = VideoWriter(filename,profile)
v = VideoWriter('peaks.avi');
open(v);
frame = getframe(gcf);
writeVideo(v,frame);
close(v);

3 pause函数

pause
pause(n)
pause(state)
oldState = pause(state)

4. Imwrite函数

        imind = frame2im(MOV);
[imind,cm] = rgb2ind(imind,32);
if nn==100
imwrite(imind,cm,'gif2.gif','gif','LoopCount',Inf,'DelayTime',0.001);
else
imwrite(imind,cm,'gif2.gif','gif','WriteMode','append','DelayTime',0.001);
end
%writeVideo(aviobj,MOV);
pause(0.0001)

看一下完整的代码吧!

clear allclc;clfx = 0:0.05:5*pi;y = sin(x);z = cos(x);subplot(211)plot(x,y,'r-','linewidth',2)hold onplot(x,z,'b-','linewidth',2)legend('sin(x)','cos(x)')xlabel('x')ylabel('y/z')set(gca,'fontsize',18)axis([0 16 -1.1 1.1])subplot(212)% for ii = 1:length(x)%     plot(x(1:ii),y(1:ii),'r-o','linewidth',2)%     hold on%     plot(x(1:ii),z(1:ii),'b-^','linewidth',2)%     %     legend('sin(x)','cos(x)')%     xlabel('x')%     ylabel('y/z')%     set(gca,'fontsize',18)%     axis([0 16 -1.1 1.1])%     xlabel('x')%     ylabel('y/z')%     set(gca,'fontsize',18)%     axis([0 16 -1.1 1.1])%     %     pause(0.001)%     drawnow% endfilename='donghua1.mp4'v = VideoWriter(filename);open(v);for ii = 1:length(x)    plot(x(1:ii),y(1:ii),'r-o','linewidth',2)    hold on    plot(x(1:ii),z(1:ii),'b-^','linewidth',2)        legend('sin(x)','cos(x)')    xlabel('x')    ylabel('y/z')    set(gca,'fontsize',18)    axis([0 16 -1.1 1.1])    xlabel('x')    ylabel('y/z')    set(gca,'fontsize',18)    axis([0 16 -1.1 1.1])    frame = getframe(gcf);    writeVideo(v,frame);    drawnowendclose(v);

那么如何保存gif格式呢

343ffbf2ff9ada51b5540a36d4e4fe5c.gif

clear allclc;clfx = 0:0.2:5*pi;y = sin(x);z = cos(x);subplot(211)plot(x,y,'r-','linewidth',2)hold onplot(x,z,'b-','linewidth',2)legend('sin(x)','cos(x)')xlabel('x')ylabel('y/z')set(gca,'fontsize',18)axis([0 16 -1.1 1.1])subplot(212)% for ii = 1:length(x)%     plot(x(1:ii),y(1:ii),'r-o','linewidth',2)%     hold on%     plot(x(1:ii),z(1:ii),'b-^','linewidth',2)%%     legend('sin(x)','cos(x)')%     xlabel('x')%     ylabel('y/z')%     set(gca,'fontsize',18)%     axis([0 16 -1.1 1.1])%     xlabel('x')%     ylabel('y/z')%     set(gca,'fontsize',18)%     axis([0 16 -1.1 1.1])%     %     pause(0.001)%     drawnow% end% filename='donghua1.mp4'% v = VideoWriter(filename);% open(v);% for ii = 1:length(x)%     plot(x(1:ii),y(1:ii),'r-o','linewidth',2)%     hold on%     plot(x(1:ii),z(1:ii),'b-^','linewidth',2)%     %     legend('sin(x)','cos(x)')%     xlabel('x')%     ylabel('y/z')%     set(gca,'fontsize',18)%     axis([0 16 -1.1 1.1])%     xlabel('x')%     ylabel('y/z')%     set(gca,'fontsize',18)%     axis([0 16 -1.1 1.1])%     frame = getframe(gcf);%     writeVideo(v,frame);%     drawnow% end% close(v);% filename='donghua1.mp4'% v = VideoWriter(filename);% open(v);for ii = 1:length(x)    plot(x(1:ii),y(1:ii),'r-o','linewidth',2)    hold on    plot(x(1:ii),z(1:ii),'b-^','linewidth',2)        legend('sin(x)','cos(x)')    xlabel('x')    ylabel('y/z')    set(gca,'fontsize',18)    axis([0 16 -1.1 1.1])    xlabel('x')    ylabel('y/z')    set(gca,'fontsize',18)    axis([0 16 -1.1 1.1])        frame = getframe(gcf);    imind = frame2im(frame);    [imind,cm] = rgb2ind(imind,32);    if ii==1        imwrite(imind,cm,'gif2.gif','gif','LoopCount',Inf,'DelayTime',0.001);    else        imwrite(imind,cm,'gif2.gif','gif','WriteMode','append','DelayTime',0.001);    end    pause(0.0001)end% close(v);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值