资源描述
(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); %显示图形窗口
运行程序,得到运动的图形,即入射角改变,折射光和反射光的变化。得到截图如下:
展开阅读全文