在之前的文章中笔者已经写清楚了如何利用MATLAB去实现视频动态图,更多的时候我们需要的是如何实现gif这样的动态图像,方便我们在论文里面进行插入,今天笔者做一期关于如何实现电磁场的gif动态图的操作,以供大家进行学习。
在之前的文章中笔者已经详细说明了TEM波的表达式,这里笔者就不再去赘述,需要的小伙伴请查看这篇文章 :
基于MATLAB实现电磁场的动画演示
今天实现gif还是采用上面的基本概念,只不过此时是注重使用imwrite函数来进行操作,具体的代码如下所示:
omega = 2*pi; %电磁波的角频率,可以自定义
k = 2; %电磁波的波数
Z = 0.3; %传播空间的波阻抗,可以自定义,但是不能够随意设值,波阻抗是有计算公式的
%% =============均匀平面电磁场===================================================
% 首先绘制均匀平面电磁场的传播示意图
% 电磁场的传播方向沿着x轴(沿着y轴或者z轴只需要修改里面的参数即可)
% 均匀平面波,又称为TEM波,其电矢量和磁矢量在空间上相互垂直,等相位
% 时间传播示意图
% t = linspace(0,10,10); %表示电磁波传播的时间,10s,时间间隔是0.1s
x = linspace(0,10,100); %传播的距离沿着x方向传播
nill = zeros(size(x));
t = 0;
% 开始绘制并保存动态图像
% matlab保存gif图像采用imwrite函数
figure('name','平面电磁波的时间传播示意图');
filename = 'TEM.gif';
for i = 1:10
E = cos(omega*t-k*x); %计算电磁波的分量Ey
H = 0.3.*E; %Hz
quiver3(x,nill,nill,nill,E,nill,'b'); %这里是计算电磁场的传播矢量,利用箭头可以明显的看到其方向
hold on
quiver3(x,nill,nill,nill,nill,H,'r');
hold off
axis([0,10,-1,1,-1,1]); %坐标轴范围设定
view(20,40); %观察的视角
frame = getframe(gcf);
im = frame2im(frame);
[A,map] = rgb2ind(im,256);
if i == 1
imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',0.2);
else
imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',0.2);
end
t = t+0.1;
end
上面实现的是时间传播示意图,再不同时刻情况下,其电磁场的变化情况。
% 空间传播示意图
x=linspace(0,5,50);
% t = linspace(0,1,100);
t=0;
figure('name','平面电磁波的空间传播示意图');
filename1 = 'TEM1.gif';
for i = 1:50
E = cos(omega*t-k*x(i)); %计算电磁波的分量Ey
H = 0.8*E; %Hz
quiver3(x(i),0,0,0,E,0,'b'); %这里是计算电磁场的传播矢量,利用箭头可以明显的看到其方向
hold on
quiver3(x(i),0,0,0,0,H,'r');
% hold off
axis([0,5,-1,1,-1,1]); %坐标轴范围设定
view(20,40); %观察的视角
frame = getframe(gcf);
im = frame2im(frame);
[A,map] = rgb2ind(im,256);
if i == 1
imwrite(A,map,filename1,'gif','LoopCount',Inf,'DelayTime',0.1);
else
imwrite(A,map,filename1,'gif','WriteMode','append','DelayTime',0.1);
end
% t=t+0.01;
end
这里实现的是空间传播示意图