基础
偏振光波包括线偏振、圆偏振、椭圆偏振几个方向,其中线偏振的电场公式为:
E
⃗
1
=
e
⃗
1
E
1
e
i
(
k
⃗
⋅
r
⃗
−
w
t
)
\vec E_1=\vec e_1E_1e^{i(\vec k\cdot \vec r-wt)}
E1=e1E1ei(k⋅r−wt)
两个线偏振可以合成圆偏振和椭圆偏振,其区别在于相位和幅度。
将公式做变形处理,取实部:
E
⃗
1
=
e
⃗
1
E
10
c
o
s
(
k
⃗
⋅
r
⃗
−
w
t
+
φ
1
)
\vec E_1=\vec e_1E_{10}cos(\vec k\cdot \vec r-wt+\varphi_1)
E1=e1E10cos(k⋅r−wt+φ1)
E
⃗
2
=
e
⃗
2
E
20
c
o
s
(
k
⃗
⋅
r
⃗
−
w
t
+
φ
2
)
\vec E_2=\vec e_2E_{20}cos(\vec k\cdot \vec r-wt+\varphi_2)
E2=e2E20cos(k⋅r−wt+φ2)
代码
u0 = 4*pi*1e-7; %自由空间中的磁导率
e0 = 1e-9/(36*pi); %自由空间中的电介质常数
f = 3*1e8; %电磁波的频率,单位Hz
w = 2*pi*f;
k = w*(u0*e0)^0.5; %计算波数
pha=pi/2; %相位差
z=0:0.01:5; %假设传播方向沿+z正方向
i=1;
fmat=moviein(10000); %建立一个10000帧的动画
for t=0:0.05:2
Ex=cos(2*pi*t-k*z); %计算x方向上t时刻,z平面的电场振幅
Ey=cos(2*pi*t-k*z+pha); %计算y方向上t时刻,z平面的电场振幅,
h=figure;set(h,'Visible','off');%设置不弹窗,避免和movie重复了
plot3(Ex,Ey,z); %画3维图
xlabel('Ex') %x,y,z坐标名
ylabel('Ey')
zlabel('Z')
title('圆极化波传播','fontsize',14)
%图像命名
hold on
grid on %格点
hold on
quiver3(0,0,0,Ex(1),Ey(1),z(1)); %矢量箭头
hold off
fmat(:,i)=getframe; %抓取图像放入fmat
i=i+1;
end
h=figure(1);
set(h,'Visible','on');
movie(fmat,1,7); %将fmat以每秒7帧的速度播放一遍
此处建立的是动画,有许多不足的地方,例如:
fmat=moviein(10000); %建立一个10000帧的动画
提前开辟一个足够大的空间不如一边生成图片一边开辟
所以稍加改动重新设计了一个生成gif的程序
u0 = 4*pi*1e-7; %自由空间中的磁导率
e0 = 1e-9/(36*pi); %自由空间中的电介质常数
f = 3*1e8; %电磁波的频率,单位Hz
w = 2*pi*f;
k = w*(u0*e0)^0.5; %计算波数
pha=1.2; %相位差
z=0:0.01:5; %假设传播方向沿+z正方向
%i=1;
pic_num=1; %帧数
for t=0:0.05:5
Ex=cos(2*pi*t-k*z); %计算x方向上t时刻,z平面的电场振幅
Ey=2*cos(2*pi*t-k*z+pha); %计算y方向上t时刻,z平面的电场振幅,
plot3(Ex,Ey,z); %画3维图
xlabel('Ex') %x,y,z坐标名
ylabel('Ey')
zlabel('Z')
title('圆极化波传播','fontsize',14) %图像命名
hold on
grid on %格点
hold on
quiver3(0,0,0,Ex(1),Ey(1),z(1)); %矢量箭头
hold off
F=getframe; %抓取当前图像
I=frame2im(F);
[I,map]=rgb2ind(I,256);%因gif不支持三维数据,所以应调用 rgb2ind,将rgb图像转为关联256种色彩的索引图像
if t==0
imwrite(I,map,'test.gif','gif'); %创建一个.gif文件,将索引图像数组和其关联的颜色图写入
else
imwrite(I,map,'test.gif','gif','WriteMode','append','DelayTime',0.01);%将多个图像并入第一个,帧间加入0.01s的延时
end
pic_num=pic_num+1;
end
pic_num是gif的帧数,每保存一次图片pic_num+1