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 
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
0003
0004
0005
0006
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
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
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
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