function fields = codd_ray(Uin,cv,th,rn) % % CODD_RAY Coddington raytrace % m = length(th); Q = 0.0; U = Uin; % trigonometric raytrace for (n=2:m) I = asin(sin(U)+Q*cv(n)); Iprime = asin(rn(n-1)*sin(I)/rn(n)); Uprime = U + Iprime - I; G = Q/(cos(U)+cos(I)); Qprime = G*(cos(Uprime)+cos(Iprime)); beta = Iprime - Uprime; Y = G*(1+cos(beta)); % needed for Coddington raytrace Z(n) = G*sin(beta); Gamma(1,n) = cos(I); Gamma(2,n) = cos(Iprime); Gamma(3,n) = cos(Uprime); % transfer Q = Qprime + th(n)*sin(Uprime); U = Uprime; end % Coddington trace U = Uin; t = th(1)./cos(U); s = t; for (n=2:m-1) Phi = (rn(n)*Gamma(2,n) - rn(n-1)*Gamma(1,n))*cv(n); sprime = rn(n)/(Phi-(rn(n-1)/s)); tprime = rn(n)*Gamma(2,n)^2/(Phi-(rn(n-1)*Gamma(1,n)^2/t)); D = (th(n) + Z(n+1) - Z(n))/Gamma(3,n); s = D - sprime; t = D - tprime; end zs = sprime*cos(Uprime) + Z(m-1) - th(m-1); zt = tprime*cos(Uprime) + Z(m-1) - th(m-1); fields = [ zs zt ];
First we define the optical system.
cv = [ 0 1/34.53 -1/21.98 -1/214.63 0]; th = [ 1e20 9 2.5 43.567826 0]; rn = [ 1 1.670028 1.72825 1 1 ];
The following script defines the field curvature for a half field-of-view of 4 degrees:
>> for (n=0:10) >> h = 0.1*n; >> u = h*4; >> fields(n+1,1:2) = [h u]; >> fields(n+1,3:4) = codd_ray(u*pi/180,cv,th,rn); >> endThe result is
h uc zs zt 0 0 -0.0000 -0.0000 0.1000 0.4000 -0.0019 -0.0041 0.2000 0.8000 -0.0075 -0.0163 0.3000 1.2000 -0.0168 -0.0366 0.4000 1.6000 -0.0299 -0.0650 0.5000 2.0000 -0.0468 -0.1016 0.6000 2.4000 -0.0673 -0.1462 0.7000 2.8000 -0.0916 -0.1989 0.8000 3.2000 -0.1196 -0.2597 0.9000 3.6000 -0.1513 -0.3284 1.0000 4.0000 -0.1868 -0.4051
Maintained by John Loomis, last updated 7 Feb 2003