📄 body1.m
字号:
%slider和edit使用selection=get(handles.uipanel1,'selectedobject');NCLevels=255;switch get(selection,'tag') case 'Newton' R=get(handles.edit2,'value'); axes(handles.axes1); Lambda=get(handles.uipanel1,'userdata').*1e-4; x=-4:8/250:4;y=x; [X,Y]=meshgrid(x); r=sqrt(X.^2+Y.^2); I=cos(pi*(r.^2/R+Lambda/2)/Lambda).^2; colormap(gray(NCLevels)); Ir=I*NCLevels; image(x,y,Ir); title('牛顿环(单位:mm)'); axis square; axes(handles.axes2); plot(r(126,:),I(126,:),'k') title('干涉光强分布图'); xlabel('r/mm(环半径)'); ylabel('相对光强'); set(gca,'XLim',[0 3]); case'interferometry1' interferometry1_handle=findobj('tag','interferometry1'); a=get(interferometry1_handle,'userdata'); if isempty(a) h=msgbox('未输入缝间距','输入错误','warn'); else Lambda=get(handles.uipanel1,'userdata').*1e-4;D=1000;%D为缝到屏的距离,a为缝宽,Lambda是波长 ym=1;xs=ym; n=501;ys=linspace(-ym,ym,n); r1=sqrt((ys-a/2).^2+D^2); r2=sqrt((ys+a/2).^2+D^2); phi=2*pi*(r2-r1)./Lambda; B=4*cos(phi/2).^2; Br=B/max(B)*NCLevels; axes(handles.axes1); image(xs,ys,Br'); title('干涉条纹'); colormap(gray(NCLevels)); axes(handles.axes2); plot(B,ys) title('干涉光强分布图'); xlabel('相对光强'); end case'Michelson' Michelson_handle=findobj('tag','Michelson'); d=get(Michelson_handle,'userdata'); if isempty(d) h=msgbox('未输入空气薄膜厚度','输入错误','warn'); else Lambad=get(handles.uipanel1,'userdata').*1e-4;f=200; xm=15; N=200; x=linspace(-xm,xm,N);y=x; [X,Y]=meshgrid(x); r=sqrt(X.^2+Y.^2); I=cos(2*pi*d*cos(atan(r/f))/Lambad).^ 2; I1=I*NCLevels; axes(handles.axes1); image(x,y,I1); title('干涉条纹'); colormap(gray(NCLevels)); axis square;axis off; axes(handles.axes2); plot(r(101,:),I(101,:),'k') title('干涉光强分布图'); xlabel('r/mm(环半径)'); ylabel('相对光强'); set(gca,'XLim',[0 15]); end case 'radiobutton9' radiobutton9_handle=findobj('tag','radiobutton9'); N=get(radiobutton9_handle,'userdata'); if isempty(N) h=msgbox('未输入光束条数','输入错误','warn'); else Lambda=get(handles.uipanel1,'userdata').*1e-4; d=2;f=1000;%f为缝后透镜焦距,a为缝宽,d为光栅常量,Lambda是波长 y=linspace(-1,1,500); theta=asin(y./sqrt(y.^2+f^2)); gramma=pi*d*sin(theta)/Lambda; I=(sin(N*gramma)./sin(gramma)).^2; I1=I/max(I);I2=I1'*NCLevels; axes(handles.axes1); image(I2); colormap(gray(NCLevels)); title('衍射图像') axis off; axes(handles.axes2); plot(I1,y) title('光强分布图'); xlabel('相对光强'); end; case'sslit' sslit_handle=findobj('tag','sslit'); a=get(sslit_handle,'userdata'); if isempty(a) h=msgbox('未输入狭缝宽度','输入错误','warn'); else Lambda=get(handles.uipanel1,'userdata').*1e-4;z=1000; ym=10;xs=ym; ny=101; ys=linspace(-ym,ym,ny); theta=asin(ys./sqrt(ys.^2+z.^2)); u=pi*a*sin(theta)/Lambda; b=sinc(u/pi).^2; br=(b/max(b))*NCLevels; axes(handles.axes1); image(xs,ys,br*2.5); axis off; title('衍射条纹'); colormap(gray(NCLevels)); axes(handles.axes2); plot(b/max(b),ys); title('光强分布图'); xlabel('相对光强'); end case'circular' circular_handle=findobj('tag','circular'); a=get(circular_handle,'userdata'); f=600;Lambda=get(handles.uipanel1,'userdata').*1e-4; x=linspace(-10,10,100);y=x; [X,Y]=meshgrid(x,y); r=sqrt(X.^2+Y.^2); theta=atan(sqrt(X.^2+Y.^2)/f); alpha=pi*a*sin(theta)/Lambda; I=(besselj(1,2*alpha)./alpha).^2;%一阶贝塞尔函数 Ir=NCLevels*I; colormap(gray(NCLevels)); axes(handles.axes1); image(x,y,Ir*20); title('衍射图像'); axis square; axis off; axes(handles.axes2); plot(r(51,:),I(51,:)) title('光强分布截面图'); xlabel('半径r'); ylabel('相对光强'); set(gca,'XLim',[0 10]); case'mslit' mslit_handle=findobj('tag','mslit'); N=get(mslit_handle,'userdata'); if isempty(N) h=msgbox('未输入缝数','输入错误','warn'); else Lambda=get(handles.uipanel1,'userdata').*1e-4;a=0.005;d=get(handles.edit5,'value')*a;f=64;%f为缝后透镜焦距,a为缝宽,d为光栅常量,Lambda是波长 y=linspace(-20,20,500); theta=asin(y./sqrt(y.^2+f^2)); beta=pi*a*sin(theta)/Lambda; gramma=pi*d*sin(theta)/Lambda; I=(sinc(beta/pi)).^2.*(sin(N*gramma)./sin(gramma)).^2; I1=I/max(I);I2=I1'*NCLevels; axes(handles.axes1); image(I2*2); colormap(gray(NCLevels)); title('衍射图像') axis off; axes(handles.axes2); plot(I1,y) title('光强分布图'); xlabel('相对光强'); end; end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -