matlab模拟光的反射折射
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(3).我们首先假设光从空气进入水中,此时n=1.5。用一次函数图像来表示光的传播路线,通过改变光的入射点来改变光的入射角和入射方向,并根据反射光、折射光与入射光的斜率关系来控制反射角、折射角与入射角关系,设计程序如下:
function ZHEFAN; set(gcf,'doublebuffer','on'); axis([-2,2,-1,1]);hold on; 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',T); k=1;dt=0.1;
while k
pause(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);
% 光的折射光的反射
%设置图片属性,双缓存防止图闪烁
%设置坐标轴范围( x 轴-2 到2,y 轴-1 到 1 ) %给图形下半部分设置成水的颜色
%注明空气和水,并且设置字体
%设置折射率
%在图形上标明折射率
%在图形上画出光源
%设置入射光
%设置折射光
%设置反射光
%设置结束提示%初始化k 方便循环,设置入射光变化量%循环体
% 设置每次图形变换间隔为0.5 秒
%输入空格终止演示,是图形停止
%设置入射光变化的范围
%入射光发生改变
%绘制最后折射光
%绘制最后反射光
%显示图形窗口
运行程序,得到运动的图形,即入射角改变,折射光和反射光的变化。得到截图如下: