% 关于光的等厚干涉(劈尖)的动画
close all;clc;clear;
set(gcf,'DoubleBuffer','on'); % 设置渲染效果
axes('position',[0.12,0.08,0.6,0.8]);hold on; axis manual; % 设置坐标轴属性
title('关于光的等厚干涉(劈尖)的动画','fontsize',16); % 添加图题
rectangle('position',[0.15,0.2,0.7,0.01],'FaceColor',[0.1,0.3,0.4]);% 画一个“矩形”,作为底面
plot([0.2,0.2],[0.2,0.4]); % 画一条竖线
plot([0.8,0.2],[0.2,0.4]); % 绘制斜面
style='none'; % 擦除模式
for k=1:10;
h(k)=plot([0.21+(k-1)*0.06]*[1,1],[0.6,0.6],'r',...
'linewidth',1,'EraseMode',style); %画出多条入射光线
end
G=0.6; % 设置入射光线随时间变化的下端点位置
while G>=0.2; % 循环计算
G=G-0.01; % 计算当前时刻的下端点位置
set(h,'ydata',[0.6,G]); % 更新绘图数据
pause(0.1); % 暂停一下显示动画效果
end
for k=1:10;
hr(k)=plot([0.21+(k-1)*0.06]*[1,1],[0.2,0.2],'r',...
'linewidth',2); % 设置底面反射光线的起点
end
while G<0.4; % 循环绘制反射光线
G=G+0.01; % 计算当前反射光线的位置
set(hr,'ydata',[0.2,G]); % 更新反射光线的位置
pause(0.1); % 暂停一下显示动画效果
end
z=[0.8,0.2]+i*[0.2,0.4]; % 生成沿着斜面的向量
N=400; % 计算采样点数
An=angle(diff(z))-pi/2; % 计算角度值
An=exp(i*An); % 模值为1的复数
zz=linspace(z(1),z(2),N); % 离散取样点值
Si=abs(sin(linspace(0,pi*20,N))).^2/20; % 生成干涉曲线
zz=zz+Si*An; % 进行旋转和平移操作
plot(zz,'b'); % 绘制干涉曲线