%作者:040403308
xmax=1;%x轴坐标长
ymax=1;%y轴坐标长
x=0.5;%x初值
y=1;%y初值
figure(1);%给程序命名
fill([0.1,xmax+0.1,xmax-0.1,-0.1],[0.1,0.1,-0.1,-0.1],[0,0.5,0]); %绘制介质n2部分的范围和颜色(挡板表示)
hold on;%保持绘制的坐标
fill([-0.1,0.1,0.1,-0.1],[ymax-0.1,ymax+0.1,0.1,-0.1],[0,0,0.5]); %绘制介质n3部分的范围与颜色(挡板表示)
hold on;%保持当前图形及轴系的所有特征
axis([-0.2,1.5,-0.6,1.5]);%定义背景坐标范围
axis('off');%覆盖坐标刻度并关闭所有轴标注、标记和背景
title('光的反射与折射')%命名实验名称
text(0.5,0.5,'n1(n1
text(-0.3,0.4,'n2')%标注显示注释'n2的位置
text(0.5,-0.3,'n3(n3
x0=xmax/2;%赋初值
y0=ymax;%赋初值
x2=xmax/2;%赋初值
y2=ymax;%赋初值
head1=line([x0;x],[y0;y],'color','r','linestyle','-','erasemode','xor'); %设置光线1的颜色、大小、线的擦除方式
head2=line([x2;x],[y2;y],'color','y','linestyle','-','erasemode','xor'); %设置光线2的颜色、大小、线的擦除方式
t=0;%赋初值
dt=0.01;%设置光的传播速度
while t<50 %循环1(显示从开始到第一次折射之间的光线)
t=t+dt;%光线的速度
x=xmax/2-t/100;%设置光线1的运动轨迹
y=x+0.5;%设置光线1的运动轨迹
x2=xmax/2-t/100;%设置光线2运动轨迹
y2=x2+0.5;%设置光线2运动轨迹
set(head1,'xdata',[0.5;x],'ydata',[1;y]);%设置光线1的运动
set(head2,'xdata',[0.5;x2],'ydata',[1;y2]);%设置光线2的运动
drawnow;%等待图纸完成事件
end%循环1结束
while t<100 %循环2(显示第1次反射到第2次折射与反射之间的光线)
t=t+dt;
x=t/100-0.5;%设置光线1的运动轨迹
y=-x+0.5;
x2=t/100-0.5;%设置光线2运动轨迹
y2=-x2+0.5;
set(head1,'xdata',[0;x],'ydata',[0.5;y]);%设置光线1的运动
set(head2,'xdata',[0;x2],'ydata',[0.5;y2]);%设置光线2的运动
drawnow;%等待图纸完成事件
end%循环2结束
while t>100%循环3(显示第2次折射与反射后的光线)
t=t+dt;
x=t/100-0.5;%设置光线1的运动轨迹
y=x-0.5;
x2=t/500+0.4;%设置光线2运动轨迹
y2=-2*x2+1;
set(head1,'xdata',[0.5;x],'ydata',[0;y]);%设置光线1的运动
set(head2,'xdata',[0.5;x2],'ydata',[0;y2]);%设置光线2的运动
drawnow;%等待图纸完成事件
end %循环3结束