(3).我们首先假设光从空气进入水中,此时n=1.5。用一次函数图像来表示光的传播路线,通过改变光的入射点来改变光的入射角和入射方向,并根据反射光、折射光与入射光的斜率关系来控制反射角、折射角与入射角关系,设计程序如下:
function ZHEFAN; % 光的折射 光的反射
set(gcf,doublebuffer,on); %设置图片属性,双缓存防止图闪烁
axis([-2,2,-1,1]);hold on; %设置坐标轴范围(x轴-2到2,y轴-1到1)
rectangle(Position,[-2,-1,4,1],...
FaceColor,[0.1,0.6,0.6]); %给图形下半部分设置成水的颜色
text(1.4,0.4,air,color,r,fontsize,14)
text(1.4,-0.4,water,color,r,fontsize,14) %注明空气和水,并且设置字体
n=1.5;t=0; %设置折射率
text(0.7,0.6,[n= ,num2str(n)],fontsize,14); %在图形上标明折射率
HL=rectangle(Position,[-0.02,0.4,0.04,0.2],...
FaceColor,[ 0.3,0.8,0.4]); %在图形上画出光源
Hi=plot([0,0],[0,0.4],b); %设置入射光
Ho=plot([0,0],[0,-1]); %设置折射光
Hr=plot([0,0],[0,1],r); %设置反射光
xlabel(请按空格停止,... fontsize,14,color,r); %设置结束提示
k=1;dt=0.1; %初始化k方便循环,设置入射光变化量
while k %循环体
pause(0.5); % 设置每次图形变换间隔为0.5秒
s=get(gcf,currentkey);
if strcmp(s,space);
clc;k=0;
end %输入空格终止演示,是图形停止
if abs(t)>0.3*pi
dt=-dt;
end %设置入射光变化的范围
t=t+dt;
A=t;
Xi=0.4*tan(A);
set(Hi,xdata,[Xi,0]); %入射光发生改变
Ao=asin(sin(A)/n);
Xo=Xi+tan(Ao);
set(Ho,xdata,[Xi,Xo]); %绘制最后折射光
Xr=Xi+tan(A);
set(Hr,xdata,[Xi,Xr]); %绘制最后反射光
set(HL,Facecolor,rand(1,3))
end
figure(gcf); %显示图形窗口
运行程序,得到运动的图形,即入射角改变,折射光和反射光的变化。得到截图如下:
展开阅读全文