question: public void toLatLon ( double v0 , double h0 ) { final double GX = 0.216507961908834992 ; final double GY = - 0.134633014879368199 ; final double A = 0.151646645621077297 ; final double Q = - 0.294355056616412800 ; final double Q2 = 0.0866448993556515751 ; final double EPSILON = .0000001 ; double v = ( double ) v0 ; double h = ( double ) h0 ; double t1 = ( v - TRANSV ) / RADIUS ; double t2 = ( h - TRANSH ) / RADIUS ; double vhat = ROTC * t2 - ROTS * t1 ; double hhat = ROTS * t2 + ROTC * t1 ; double e = Math . cos ( Math . sqrt ( vhat * vhat + hhat * hhat ) ) ; double w = Math . cos ( Math . sqrt ( vhat * vhat + ( hhat - 0.4 ) * ( hhat - 0.4 ) ) ) ; double fx = EY * w - WY * e ; double fy = EX * w - WX * e ; double b = fx * GX + fy * GY ; double c = fx * fx + fy * fy - Q2 ; double disc = b * b - A * c ; double x , y , z , delta ; if ( Math . abs ( disc ) < EPSILON ) { z = b / A ; x = ( GX * z - fx ) / Q ; y = ( fy - GY * z ) / Q ; } else { delta = Math . sqrt ( disc ) ; z = ( b + delta ) / A ; x = ( GX * z - fx ) / Q ; y = ( fy - GY * z ) / Q ; if ( vhat * ( PX * x + PY * y + PZ * z ) < 0 ) { z = ( b - delta ) / A ; x = ( GX * z - fx ) / Q ; y = ( fy - GY * z ) / Q ; } } double lat = Math . asin ( z ) ; final double [ ] bi = { 1.00567724920722457 , - 0.00344230425560210245 , 0.000713971534527667990 , - 0.0000777240053499279217 , 0.00000673180367053244284 , - 0.000000742595338885741395 , 0.0000000905058919926194134 } ; double lat2 = lat * lat ; double earthlat = lat * ( bi [ 0 ] + lat2 * ( bi [ 1 ] + lat2 * ( bi [ 2 ] + lat2 * ( bi [ 3 ] + lat2 * ( bi [ 4 ] + lat2 * ( bi [ 5 ] + lat2 * ( bi [ 6 ] ) ) ) ) ) ) ) ; earthlat = Math . toDegrees ( earthlat ) ; double lon = Math . toDegrees ( Math . atan2 ( x , y ) ) ; double earthlon = lon + 52.0 ; this . resultLat = earthlat ; this . resultLon = - earthlon ; }
target:  V&H is a system of coordinates (V and H) for describing locations of rate centers in the United States. The projection, devised by J. K. Donald, is an "elliptical," or "doubly equidistant" projection, scaled down by a factor of 0.003 to balance errors. <P> The foci of the projection, from which distances are measured accurately (except for the scale correction), are at 37d 42m 14.69s N, 82d 39m 15.27s W (in Floyd Co., Ky.) and 41d 02m 55.53s N, 112d 03m 39.35 W (in Webster Co., Utah). They are just 0.4 radians apart. <P> Here is the transformation from latitude and longitude to V&H: First project the earth from its ellipsoidal surface to a sphere. This alters the latitude; the coefficients bi in the program are the coefficients of the polynomial approximation for the inverse transformation. (The function is odd, so the coefficients are for the linear term, the cubic term, and so on.) Also subtract 52 degrees from the longitude. <P> For the rest, compute the arc distances of the given point to the reference points, and transform them to the coordinate system in which the line through the reference points is the X-axis and the origin is the eastern reference point. The solution is <P> h = (square of distance to E - square of distance to W + square of distance between E and W) / twice distance between E and W; <BR> v = square root of absolute value of (square of distance to E - square of h). <P> Reduce by three-tenths of a percent, rotate by 76.597497 degrees, and add 6363.235 to V and 2250.7 to H. <P> To go the other way, as this program does, undo the final translation, rotation, and scaling. The z-value Pz of the point on the x-y-z sphere satisfies the quadratic Azz+Bz+c=0, where <P> A = (ExWz-EzWx)^2 + (EyWzx-EzWy)^2 + (ExWy-EyWx)^2; <BR> B = -2[(Ex cos(arc to W) - Wx cos(arc to E))(ExWz-EzWx) - (Ey cos(arc to W) -Wy cos(arc to E))(EyWz-EzWy)]; <BR> C = (Ex cos(arc to W) - Wx cos(arc to E))^2 + (Ey cos(arc to W) - Wy cos(arc to E))^2 - (ExWy - EyWx)^2. <P> Solve with the quadratic formula. The latitude is simply the arc sine of Pz. Px and Py satisfy <P> ExPx + EyPy + EzPz = cos(arc to E); <BR> WxPx + WyPy + WzPz = cos(arc to W). <P> Substitute Pz's value, and solve linearly to get Px and Py. The longitude is the arc tangent of Px/Py. Finally, this latitude and longitude are spherical; use the inverse polynomial approximation on the latitude to get the ellipsoidal earth latitude, and add 52 degrees to the longitude.