模拟光线通过三棱镜的色散
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
模拟光线通过三棱镜的色散
姓名:周澜
学号:03281194
物理系04级
1. 题目说明:
在真空中,光以恒定的速度传播;但在介质中,光的速度就要发生变化,并且不同频率的光在同种介质中的传播速度也不相同,这一事实在折射现象中被明显的表现出来,白光通过三棱镜后的色散是众所周知的。
它的特点是:白光通过三棱镜后折射为赤,橙,黄,绿,蓝,靛,紫七种颜色的单色光,这七种光在玻璃中的折射率不同,其中,红光最小,紫光最大,由此产生了其中光的分离。
其中红光在最上面,紫光在最下面。
2. 程序说明:
本程序定性模拟光在三棱镜中的色散现象,程序的核心是通过对光线的两次旋转实现不同光线在棱镜中的分离和出射后的分离。
程序中,首先画一个等边三角形作为三棱镜,再将三角形逆时针旋转pi/14,以便实现光的折射,然后以动画的形式画出白光入射,使用set(gcf,'doublebuffer','on');保证画面不闪。
第一次旋转中,对第i条光线顺时针转C(i)度(C(i)为一等差数列),把在棱镜中的光线分开。
引入*s(i),是因为每条光线在棱镜中的光程不同,必须引入s(i)才能保证光线都在棱镜边上发生第二次旋转。
第二次旋转中,再在第一次的基础上,把第i条光线旋转C(i)度(C(i)为一等差数列),第二次把7条光线分开。
在出射时,用了一个L(n)的循环,使每条光线的宽度逐渐变大,更接近于真实。
因为没找到精确的公式,所以只是定性的描述,望老师理解。
程序清单
function optics_prism;
% 光通过三稜镜色散
close all
figure('position',[78 276 792 402]); %确定图形窗口的范围
xp=[-0.2,0.2,0];yp=[0.2,0.2,0.5];B=pi/14; %确定正三棱镜的位置和大小
ZZ=[xp;yp]'*[cos(B),sin(B);-sin(B),cos(B)]; %将将三棱镜逆时针转动 pi/14;
fill(ZZ(:,1),ZZ(:,2),[0.4,0.4,0.6]); %填充三棱镜的颜色
axis([-1,1,0,1]);
hold on;
set(gca,'color','k'); %设置背景的颜色为黑色
t=0; A=pi/8;
set(gcf,'doublebuffer','on'); %设置并当前图象的句柄,用'on'保证图象不闪x=[-1,-1];y=[0,0]; %确定白光的起点
H=plot(x,y,'w','linewidth',6); %画白光
while t<0.8;
pause(0.1);
t=t+0.1;
x(2)=-1+t*cos(A);
y(2)=t*sin(A);
set(H,'xdata',x,'ydata',y);
end %设置白光入射的角度,画出白光射向三棱镜
x1=[x(2),x(2)];y1=[y(2),y(2)];H1=plot(x1,y1,'r');
H2=plot(x1,y1,'color',[1,1,0]);x2=x1;y2=y1;
H3=plot(x1,y1,'y');x3=x1;y3=y1;
H4=plot(x1,y1,'g');x4=x1;y4=y1;
H5=plot(x1,y1,'color',[0,1,1]);x5=x1;y5=y1;
H6=plot(x1,y1,'b');x6=x1;y6=y1;
H7=plot(x1,y1,'color',[1,0,1]);x7=x1;y7=y1; %设置色散光的七种颜色
t=0;
C=linspace(pi/16,0,7);
s=linspace(1,1.2,7);
while t<0.165;
pause(0.1);
t=t+0.01;
x1(2)=x(2)+t*cos(C(1))*s(1);y1(2)=y(2)+t*sin(C(1))*s(1);
x2(2)=x(2)+t*cos(C(2))*s(2);y2(2)=y(2)+t*sin(C(2))*s(2);
x3(2)=x(2)+t*cos(C(3))*s(3);y3(2)=y(2)+t*sin(C(3))*s(3);
x4(2)=x(2)+t*cos(C(4))*s(4);y4(2)=y(2)+t*sin(C(4))*s(4);
x5(2)=x(2)+t*cos(C(5))*s(5);y5(2)=y(2)+t*sin(C(5))*s(5);
x6(2)=x(2)+t*cos(C(6))*s(6);y6(2)=y(2)+t*sin(C(6))*s(6);
x7(2)=x(2)+t*cos(C(7))*s(7);y7(2)=y(2)+t*sin(C(7))*s(7);
set(H1,'xdata',x1,'ydata',y1);
set(H2,'xdata',x2,'ydata',y2);
set(H3,'xdata',x3,'ydata',y3);
set(H4,'xdata',x4,'ydata',y4);
set(H5,'xdata',x5,'ydata',y5);
set(H6,'xdata',x6,'ydata',y6);
set(H7,'xdata',x7,'ydata',y7);
end %设置光在棱镜中的色散,以和棱镜外的光线区别开,
%其中引入s(i)是因为每条光线的光程不同,必须使它们
%都到达镜的边缘再旋转
C=linspace(0,-pi/8,7);
x1(1)=[];y1(1)=[];
x2(1)=[];y2(1)=[];
x3(1)=[];y3(1)=[];
x4(1)=[];y4(1)=[];
x5(1)=[];y5(1)=[];
x6(1)=[];y6(1)=[];
x7(1)=[];y7(1)=[];
K1=get(H1,'color');
K2=get(H2,'color');
K3=get(H3,'color');
K4=get(H4,'color');
K5=get(H5,'color');
K6=get(H6,'color');
K7=get(H7,'color'); %将从透镜中出来的各光线复值为空,以便下面设置L=2:3:400;n=1;
while t<0.5;
pause(0.1);
t=t+0.01;n=n+1;
plot([x1,x1+t*cos(C(1))],[y1,y1+t*sin(C(1))],...
'color',K1,'linewidth',L(n));
plot([x2,x2+t*cos(C(2))],[y2,y2+t*sin(C(2))],...
'color',K2,'linewidth',L(n));
plot([x3,x3+t*cos(C(3))],[y3,y3+t*sin(C(3))],...
'color',K3,'linewidth',L(n));
plot([x4,x4+t*cos(C(4))],[y4,y4+t*sin(C(4))],...
'color',K4,'linewidth',L(n));
plot([x5,x5+t*cos(C(5))],[y5,y5+t*sin(C(5))],...
'color',K5,'linewidth',L(n));
plot([x6,x6+t*cos(C(6))],[y6,y6+t*sin(C(6))],...
'color',K6,'linewidth',L(n));
plot([x7,x7+t*cos(C(7))],[y7,y7+t*sin(C(7))],...
'color',K7,'linewidth',L(n));
x1=x1+t*cos(C(1));y1=y1+t*sin(C(1));
x2=x2+t*cos(C(2));y2=y2+t*sin(C(2));
x3=x3+t*cos(C(3));y3=y3+t*sin(C(3));
x4=x4+t*cos(C(4));y4=y4+t*sin(C(4));
x5=x5+t*cos(C(5));y5=y5+t*sin(C(5));
x6=x6+t*cos(C(6));y6=y6+t*sin(C(6));
x7=x7+t*cos(C(7));y7=y7+t*sin(C(7)); %设置出射光线,并使其宽度逐渐增加end
程序运行结果:
图:三棱镜的色散。