Changeset 2063 in ntrip for trunk/BNC/bncutils.cpp
- Timestamp:
- Dec 1, 2009, 1:54:49 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNC/bncutils.cpp
r2043 r2063 185 185 xyz = RR * rsw; 186 186 } 187 188 // Rectangular Coordinates -> Ellipsoidal Coordinates 189 //////////////////////////////////////////////////////////////////////////// 190 t_irc xyz2ell(const double* XYZ, double* Ell) { 191 192 const double bell = t_CST::aell*(1.0-1.0/t_CST::fInv) ; 193 const double e2 = (t_CST::aell*t_CST::aell-bell*bell)/(t_CST::aell*t_CST::aell) ; 194 const double e2c = (t_CST::aell*t_CST::aell-bell*bell)/(bell*bell) ; 195 196 double nn, ss, zps, hOld, phiOld, theta, sin3, cos3; 197 198 ss = sqrt(XYZ[0]*XYZ[0]+XYZ[1]*XYZ[1]) ; 199 zps = XYZ[2]/ss ; 200 theta = atan( (XYZ[2]*t_CST::aell) / (ss*bell) ); 201 sin3 = sin(theta) * sin(theta) * sin(theta); 202 cos3 = cos(theta) * cos(theta) * cos(theta); 203 204 // Closed formula 205 Ell[0] = atan( (XYZ[2] + e2c * bell * sin3) / (ss - e2 * t_CST::aell * cos3) ); 206 Ell[1] = atan2(XYZ[1],XYZ[0]) ; 207 nn = t_CST::aell/sqrt(1.0-e2*sin(Ell[0])*sin(Ell[0])) ; 208 Ell[2] = ss / cos(Ell[0]) - nn; 209 210 const int MAXITER = 100; 211 for (int ii = 1; ii <= MAXITER; ii++) { 212 nn = t_CST::aell/sqrt(1.0-e2*sin(Ell[0])*sin(Ell[0])) ; 213 hOld = Ell[2] ; 214 phiOld = Ell[0] ; 215 Ell[2] = ss/cos(Ell[0])-nn ; 216 Ell[0] = atan(zps/(1.0-e2*nn/(nn+Ell[2]))) ; 217 if ( fabs(phiOld-Ell[0]) <= 1.0e-11 && fabs(hOld-Ell[2]) <= 1.0e-5 ) { 218 return success; 219 } 220 } 221 222 return failure; 223 }
Note:
See TracChangeset
for help on using the changeset viewer.