Code covered by the BSD License  

Highlights from
Optical_bench

image thumbnail
from Optical_bench by Bjorn Gustavsson
Optical_bench - a simple ray-tracing tool for optical systems.

Description of opt_sphereintersection

opt_sphereintersection

PURPOSE ^

OPT_SPHEREINTERSECTION - intersection between a ray and a spherical lens surface

SYNOPSIS ^

function [rinter,en] = opt_sphereintersection(rl,e_in,rsf,curvature,lensradius,en)

DESCRIPTION ^

 OPT_SPHEREINTERSECTION - intersection between a ray and a spherical lens surface 
   
 CALLING: 
  [rinter,en] = opt_sphereintersection(rl,e_in,rsf,curvature,lensradius,en)
 INPUT:

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [rinter,en] = opt_sphereintersection(rl,e_in,rsf,curvature,lensradius,en)
0002 % OPT_SPHEREINTERSECTION - intersection between a ray and a spherical lens surface
0003 %
0004 % CALLING:
0005 %  [rinter,en] = opt_sphereintersection(rl,e_in,rsf,curvature,lensradius,en)
0006 % INPUT:
0007 %
0008 ex = e_in(1);
0009 ey = e_in(2);
0010 ez = e_in(3);
0011 xl = rl(1);
0012 yl = rl(2);
0013 zl = rl(3);
0014 x0 = rsf(1);
0015 y0 = rsf(2);
0016 z0 = rsf(3);
0017 R = curvature;
0018 
0019 % I'd like to say that I did this by myself...
0020 
0021 l(2) = [ 1/2/(ex^2+ey^2+ez^2)*(2*ez*z0-2*zl*ez-2*yl*ey+2*ex*x0+2*ey*y0-2*xl*ex+2*(2*ex^2*zl*z0+2*ez*z0*ex*x0-ex^2*y0^2-ex^2*z0^2-ex^2*yl^2+ex^2*R^2-ex^2*zl^2-ey^2*xl^2-ey^2*z0^2-ey^2*x0^2+ey^2*R^2-ey^2*zl^2-ez^2*xl^2-ez^2*y0^2-ez^2*x0^2-ez^2*yl^2+ez^2*R^2+2*ex^2*yl*y0+2*ey^2*zl*z0+2*ey^2*xl*x0+2*ez^2*xl*x0+2*ez^2*yl*y0-2*ez*z0*yl*ey+2*ez*z0*ey*y0-2*ez*z0*xl*ex+2*zl*ez*yl*ey-2*zl*ez*ex*x0-2*zl*ez*ey*y0+2*zl*ez*xl*ex-2*yl*ey*ex*x0+2*yl*ey*xl*ex+2*ex*x0*ey*y0-2*ey*y0*xl*ex)^(1/2))];
0022 
0023 % ...But who am I trying to fool
0024 
0025 l(1) = [ 1/2/(ex^2+ey^2+ez^2)*(2*ez*z0-2*zl*ez-2*yl*ey+2*ex*x0+2*ey*y0-2*xl*ex-2*(2*ex^2*zl*z0+2*ez*z0*ex*x0-ex^2*y0^2-ex^2*z0^2-ex^2*yl^2+ex^2*R^2-ex^2*zl^2-ey^2*xl^2-ey^2*z0^2-ey^2*x0^2+ey^2*R^2-ey^2*zl^2-ez^2*xl^2-ez^2*y0^2-ez^2*x0^2-ez^2*yl^2+ez^2*R^2+2*ex^2*yl*y0+2*ey^2*zl*z0+2*ey^2*xl*x0+2*ez^2*xl*x0+2*ez^2*yl*y0-2*ez*z0*yl*ey+2*ez*z0*ey*y0-2*ez*z0*xl*ex+2*zl*ez*yl*ey-2*zl*ez*ex*x0-2*zl*ez*ey*y0+2*zl*ez*xl*ex-2*yl*ey*ex*x0+2*yl*ey*xl*ex+2*ex*x0*ey*y0-2*ey*y0*xl*ex)^(1/2))];
0026 
0027 % Where would I be without the symbolic toolbox?
0028 
0029 [qwe,ii] = min(abs(l));
0030 l = l(ii);
0031 
0032 rinter = point_on_line(rl,e_in,l);
0033 
0034 r1 = rinter - rsf;
0035 r2 = cross(r1,en);
0036 
0037 en = [];
0038 if norm(r2)<lensradius
0039   en = r1/norm(r1);
0040 else
0041   rinter = [];
0042 end
0043

Generated on Thu 29-Apr-2010 14:16:49 by B. Gustavsson with m2html © 2003

Contact us