File:Snells law wavefronts.svg

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search

Original file (SVG file, nominally 410 × 342 pixels, file size: 68 KB)

Captions

Captions

Add a one-line explanation of what this file represents
Description Illustration of wavefronts in the context of Snell's law.
Date (UTC)
Source self-made with MATLAB
Author Oleg Alexandrov
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.

Source code (MATLAB)

[edit]
% Illustration of Snell's law
function main()
   n1=1.0;
   n2=1.5;

   figure(1); clf; hold on; axis equal; axis off;
   sign = -1;% is the source up or down?
   O=[0, -1*sign];
   k=500;

   
% KSmrq's colors
   red    = [0.867 0.06 0.14];
   blue   = [0, 129, 205]/256;
   green  = [0, 200,  70]/256;
   yellow = [254, 194,   0]/256;
   white = 0.99*[1, 1, 1];
   black = [0, 0, 0];
   gray = 0.5*white;

   color1=red;
   color2=blue;
   color3=gray;
   lw = 4;
   
   plot_line=0;
   Theta=linspace(0, 2*pi, k);
   V=0*Theta; W=0*Theta;
   S0=4;
   spacing=0.45;
   p=floor(S0/spacing);
   S=linspace(0, S0, p+1)+0.1*spacing;

   % plot the interface between diellectrics
   L=3.8;
   plot([-L, L], [0, 0], 'color', color3, 'linewidth', lw);


% plot a ray
   plot_line=1;
   s=5.2;
   theta=pi/3; wfr(s, theta, n1, n2, O, sign, plot_line, color1, lw);

% plot the wafefronts
   plot_line=0;
   for i=1:p
      for j=1:k
	 s=S(i);
	 theta=Theta(j);
	 [V(j), W(j)]=wfr(s, theta, n1, n2, O, sign, plot_line, color1, lw);
      end
      plot(V, W, 'color', color2, 'linewidth', lw);
   end


   % dummy point to enlarge the bounding box
   plot(0, S0+1.5*spacing, '*', 'color', white);

   saveas(gcf, 'Snells_law_wavefronts.eps', 'psc2')
   %plot2svg('Snells_law_wavefronts.svg')

function [a, b]=wfr(s, theta, n1, n2, O, sign, plot_line, color1, lw);

   X=O+s*[sin(theta), sign*cos(theta)];

  if( sign*X(2) > 0 )
    t=-sign*O(2)/cos(theta);
    X0=O+t*[sin(theta), sign*cos(theta)];
    
    if (plot_line == 1) 
      plot([O(1), X0(1)], [O(2), X0(2)], 'color', color1, 'linewidth', lw, 'linestyle', '--');
    end

    d = norm(O-X0);
    r = (s-d)*(n2/n1)^(sign);

    theta2=asin(n1*sin(theta)/n2);
    XE=X0+r*[sin(theta2), sign*cos(theta2)];
  else
    XE = X;
  end  
  a = XE(1);
  b = XE(2); 

  if (plot_line==1)
    plot([X0(1), XE(1)], [X0(2), XE(2)], 'color', color1, 'linewidth', lw, 'linestyle', '--');
  end

File history

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

Date/TimeThumbnailDimensionsUserComment
current04:18, 6 January 2008Thumbnail for version as of 04:18, 6 January 2008410 × 342 (68 KB)Oleg Alexandrov (talk | contribs)Tweak bd box, same license
20:24, 5 January 2008Thumbnail for version as of 20:24, 5 January 2008512 × 427 (68 KB)Oleg Alexandrov (talk | contribs){{Information |Description=Illustration of wavefronts in the context of Snell's law. |Source=self-made with MATLAB |Date=~~~~~ |Author= Oleg Alexandrov |Permission= |other_versions= }} {{PD-

The following 2 pages use this file:

File usage on other wikis