Cartoon of the emergence of edge fringes
Matlab code
% Program following the evolution of edge fringes past an opaque knife edge
%
clear all
close all
vid = VideoWriter('edgePropagation.mp4','MPEG-4');
vid.FrameRate = 60; % Default 30
vid.Quality = 100; % Default 75
open(vid);
figure('units','pixels','position',[0 0 1920 1080],'ToolBar','none');
set(0,'defaultfigurecolor',[1 1 1]); % White background
set(gca,'linewidth',7);
ydir = -1:0.1:1; % h and ydir define detector surface
h = -10:0.01:10;
hpos = 0:0.01:10;
[H,YDir] = meshgrid(h,ydir);
Det = 0*sin(H).^2+cos(YDir).^2;
d2 = 0.0001:0.025:10.0001;
lambda = 1;
nuStep = 0.01;
xc=0; yc=-5; zc=0; % coordinates of box center
Lx=0.1; % box size x
Ly=10; % box size y
Lz=4; % box size z
maskAlp=0.5; % transparency of box (max=1=opaque)
Cs = [0.625 0.64 0.775]; % Light Phil blue
X = [0 0 0 0 0 1; 1 0 1 1 1 1; 1 0 1 1 1 1; 0 0 0 0 0 1];
Y = [0 0 0 0 1 0; 0 1 0 0 1 1; 0 1 1 1 1 1; 0 0 1 1 1 0];
Z = [0 0 1 0 0 0; 0 0 1 0 0 0; 1 1 1 0 1 1; 1 1 1 0 1 1];
Xcoords = Lx*(X-0.5) + xc;
Ycoords = Ly*(Y-0.5) + yc;
Zcoords = Lz*(Z-0.5) + zc;
lp = [-2 -2 0];
for m = 1:length(d2)
newplot
hold on
clear F
for n=1:length(h)
nu = h(n)*(2/(lambda*d2(m)))^0.5;
nu_vector=nu:nuStep:nu+100;
F(n)=((1+1i)/2)*sum(exp((-1i*pi*(nu_vector).^2)/2));
Det(:,n)=(abs(max(F))/10000)*((1+1i)/2)*sum(exp((-1i*pi*(nu_vector).^2)/2));
end
% Curve tracking the position of the first minimum with distance from
% the screen
plot3(hpos,(2*hpos).^0.5,hpos*0,'LineWidth',2,'Color','r');
% max(F)
F=abs(F)/abs(max(F));
colormap gray
cb = colorbar;
set(cb,'position',[.125 .31 .01 .25],'TickLength',0.0); % Size and position of colorbar
cb.Color = [0 0 0];
axis off
% Semitransparent mask
screen = fill3(Xcoords-0.1,Ycoords,Zcoords,Cs,'FaceAlpha',maskAlp,'LineStyle','none'); % draw cube
hold on
if (m > 1)
aa = pcolor(YDir,-H,abs(Det));
set(aa,'EdgeColor','none','FaceAlpha',0.92);
aa.ZData = d2(m) + aa.ZData;
rotate(aa,[0 1 0],90,[0,0,0]);
line1 = plot3([-0.8 10],[0 0],[0 0],'color','k','LineWidth',2,'LineStyle','-.');
xlim([-1 10.01]);
ylim([-1 1]);
zlim([-2 2]);
axis equal
set(gca,'linewidth',2);
set(gca, 'Projection','perspective');
set(gca,'View',[-95,16]);
frame = getframe(gcf);
writeVideo(vid,frame);
end
hold off;
end
% Output the movie as an mpg file
close(vid);