File:Lens and wavefronts.gif

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search
Lens_and_wavefronts.gif(183 × 356 pixels, file size: 35 KB, MIME type: image/gif, looped, 9 frames, 0.7 s)

Summary[edit]

Description

Illustration of wavefronts after passing through a lens. Interestingly, to produce a point source reverse the direction of the waves, with the focus point acting as a point source.

Date (UTC)
Source self-made with MATLAB
Author Oleg Alexandrov
Other versions

Lens and wavefronts rotated.gif

Matlab Logo.png
This diagram was created with MATLAB.

Licensing[edit]

Public domain I, the copyright holder of this work, release this work into the public domain. This applies worldwide.
In some countries this may not be legally possible; if so:
I grant anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law.

MATLAB source code[edit]

% Illustration of planar wavefronts going through a lens and getting focused
% into a converging spherical wave

function main ()

  % lens index
   n=1.5; 

  % number of points, used for plotting
   N = 100;

  % radii of lens surfaces
   R1 = 0.5; 
   R2 = 1.5;

  % centers of circles (y coord is 0)
   O1 = -2.9;
   O2 = -O1;

  % focal length
   f = (n-1)*(1/R1+1/R2); f = 1/f;
   
   % theta0 determines the width of the lens
   theta0=pi/6;
   Theta = linspace(-theta0, theta0, N);

  % right face of the lens
   L1x = R1*cos(Theta)+O1;
   L1y =R1*sin(Theta); 

   % left size of the lens
   L2x=-R2*cos(Theta)+O2;
   L2y = R2*sin(Theta);

   % flat top part
   Topx = [L1x(N), L2x(N)];
   Topy = [L1y(N), L2y(N)];

   % flat bottom part
   Botx = [L1x(1) L2x(1)];
   Boty = [L1y(1), L2y(1)];

   % the lens
   Lensx = [L1x rv_vec(Topx), rv_vec(L2x), Botx];
   Lensy = [L1y rv_vec(Topy), rv_vec(L2y), Boty];

   % Parameters for graphing
   Lens_color  = [204, 226, 239]/256;
   Lens_border = 0.3*[1, 1, 1];
   lbw = 1.3; % lens border width
   wavefr_color = [1, 0, 0];
   wavefr_bdw   = 2;
   
   % spacing between wavefronts (both plane and spherical ones)
   spacing = 0.25;

   % 2*H is the height of the plane wavefronts
   H = L1y(N); 

   % theta2 = slope of the line going from the upper-right
   % end of the lens to the focus point
   theta2 = atan(L1y(N)/(f-L1x(N)));

   % Shape of the spherical wavefronts.
   Theta = linspace(-theta2, theta2, N);
   X = -cos(Theta);
   Y =  sin(Theta);

   S = -f; % start ploting waves from here to the right

   % number of frames in the movie
   num_frames = 10;
   Shifts = linspace(0, spacing, num_frames+1);

   % start at S+shift, plot the wavefronts
   for frame_no = 1:num_frames

      shift = Shifts(frame_no);
      
      s = S+shift;

      % plotting window
      figure(1); clf; hold on; axis equal; axis off;

      % plot the plane wavefronts
      while s < 0
         plot([s, s], [-H, H], 'color', wavefr_color, 'linewidth', wavefr_bdw);
         s = s + spacing;
      end
      
   
      % plot the spherical wavefronts
      s = s - 10*spacing; % backtrack a bit
      while s < f
         
         rho = f-s;
         
         if rho*Y(N) <= L1y(N)
            plot(rho*X+f, rho*Y, 'color', wavefr_color, 'linewidth', wavefr_bdw);
         end
         
         s = s + spacing;
         
      end

      % plot the lens
      fill(Lensx, Lensy, Lens_color, 'EdgeColor', Lens_border, 'LineWidth', lbw);
%      get(H)
%      return
      
      % Invisible points to force MATLAB to keep the
      % plotting window fixed.
      tiny = 0.15*spacing;
      white = 0.999*[1, 1, 1];
      plot(S-tiny,   H+tiny, 'color', white);
      plot(S-tiny,  -H-tiny, 'color', white);
      plot(f+tiny,   H+tiny, 'color', white);
      plot(f+tiny,  -H-tiny, 'color', white);

      % Rotate by 90 degrees
      set(gca, 'View', [90, 90])

      % save current file
      frame_file = sprintf('Frame%d.eps', 1000+frame_no);
      disp(frame_file);
      saveas(gcf, frame_file, 'psc2');
      pause(0.07)
   end

% The frames were converted to a movie with the command
% convert -antialias -loop 10000  -delay 8 -compress LZW Frame100* Lens_and_wavefronts.gif
   
function W = rv_vec(V)

   K = length(V);

   W = V;
   for i=1:K
      W(i) = V(K-i+1);
   end

File history

Click on a date/time to view the file as it appeared at that time.

Date/TimeThumbnailDimensionsUserComment
current06:35, 25 November 2007Thumbnail for version as of 06:35, 25 November 2007183 × 356 (35 KB)Oleg Alexandrov (talk | contribs)tweak
04:10, 24 November 2007Thumbnail for version as of 04:10, 24 November 2007171 × 356 (33 KB)Oleg Alexandrov (talk | contribs)tweak
04:09, 24 November 2007Thumbnail for version as of 04:09, 24 November 2007171 × 356 (33 KB)Oleg Alexandrov (talk | contribs)tweak
00:56, 24 November 2007Thumbnail for version as of 00:56, 24 November 2007171 × 359 (33 KB)Oleg Alexandrov (talk | contribs)tweak, same license
00:53, 24 November 2007Thumbnail for version as of 00:53, 24 November 2007171 × 359 (32 KB)Oleg Alexandrov (talk | contribs)tweak
00:49, 24 November 2007Thumbnail for version as of 00:49, 24 November 2007151 × 359 (31 KB)Oleg Alexandrov (talk | contribs){{Information |Description=Illustration of wavefronts after passing through a [:en:lens (optics)|lens]] |Source=self-made with MATLAB |Date=~~~~~ |Author= Oleg Alexandrov |Permission=see below |other_versions= }}
  • You cannot overwrite this file.

There are no pages that link to this file.

File usage on other wikis

The following other wikis use this file: