--- ray/src/cv/source.cal 1992/08/18 13:23:14 2.3 +++ ray/src/cv/source.cal 2003/02/22 02:07:23 2.9 @@ -1,11 +1,10 @@ -{ SCCSid "$SunId$ LBL" } - +{ RCSid: $Id: source.cal,v 2.9 2003/02/22 02:07:23 greg Exp $ } { Source distribution coordinates (degrees). - Theta is measured from the negative z-axis, - phi is measured from the positive x-axis - according to the right-hand rule. + Theta is measured from the negative z-axis. + Phi is measured from the positive x-axis (0 degrees) + towards the negative y-axis (90 degrees). srcB_vert and srcB_horiz are angles used in type B photometry. @@ -14,30 +13,41 @@ with a rectangular box. lboxcorr provides a more accurate calculation for nearby surfaces, but requires that the source box be centered at the origin. + The dimensions of the box, which must be aligned with + the x,y,z axes, are given in meters regardless of the + units being used in the scene file. + cylcorr function provides the same correction for a + cylinder whose central axis is aligned with the Z-axis. + A1 - optional multipier - A2,A3,A4 - X,Y,Z dimensions of axis-aligned box + A2,A3,A4 - X,Y,Z dimensions of axis-aligned box (in meters!) +or + A2,A3 - diameter and height of Z-aligned cylinder (meters) } { local definitions } boxprojection = abs(Dx)*A3*A4 + abs(Dy)*A2*A4 + abs(Dz)*A2*A3; lboxprojection = ( noneg(abs(Px-Dx*Ts)-A2/2)*A3*A4 + noneg(abs(Py-Dy*Ts)-A3/2)*A2*A4 + noneg(abs(Pz-Dz*Ts)-A4/2)*A2*A3 ) / Ts; +cylprojection = A2*A3*sqrt(1-Dz*Dz) + PI/4*A2*A2*abs(Dz); flatcorr(v) = corr(v) / Rdot; { correction for flat sources } corr(v) = if(AC-.5, A1*v, v); { multiplier correction } boxcorr(v) = A1 * v / boxprojection; { correction for emitting box } lboxcorr(v) = A1 * v / lboxprojection; { local box correction } +cylcorr(v) = A1 * v / cylprojection; { cylinder correction } src_theta = Acos(Dz) / DEGREE; { 0-180 } -src_phi = mod( atan2(Dy, Dx) / DEGREE, 360 ); { 0-360 } +src_phi = mod( Atan2(Dy, -Dx) / DEGREE, 360 ); { 0-360 } { bilateral symmetry } src_phi2 = tri( src_phi, 180 ); { 0-180 } { quadrilateral symmetry } src_phi4 = tri( src_phi, 90 ); { 0-90 } { Type B photometry coordinates } -srcB_vert = atan( -Dx/Dz ) / DEGREE; -srcB_horiz = Asin(Dy) / DEGREE; - { w/ bilateral symmetry } +srcB_vert = atan2( -Dx, Dz ) / DEGREE; +srcB_horiz = atan2( Dy, Dz ) / DEGREE; + { w/ symmetry } +srcB_vert2 = abs( srcB_vert ); srcB_horiz2 = abs( srcB_horiz );