00001 #pragma ident "$Id: GeodeticFrames.hpp 2293 2010-02-12 18:14:16Z btolman $" 00002 00003 //============================================================================ 00004 // 00005 // This file is part of GPSTk, the GPS Toolkit. 00006 // 00007 // The GPSTk is free software; you can redistribute it and/or modify 00008 // it under the terms of the GNU Lesser General Public License as published 00009 // by the Free Software Foundation; either version 2.1 of the License, or 00010 // any later version. 00011 // 00012 // The GPSTk is distributed in the hope that it will be useful, 00013 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00015 // GNU Lesser General Public License for more details. 00016 // 00017 // You should have received a copy of the GNU Lesser General Public 00018 // License along with GPSTk; if not, write to the Free Software Foundation, 00019 // Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00020 // 00021 // Copyright 2004, The University of Texas at Austin 00022 // 00023 //============================================================================ 00024 00025 //============================================================================ 00026 // 00027 //This software developed by Applied Research Laboratories at the University of 00028 //Texas at Austin, under contract to an agency or agencies within the U.S. 00029 //Department of Defense. The U.S. Government retains all rights to use, 00030 //duplicate, distribute, disclose, or release this software. 00031 // 00032 //Pursuant to DoD Directive 523024 00033 // 00034 // DISTRIBUTION STATEMENT A: This software has been approved for public 00035 // release, distribution is unlimited. 00036 // 00037 //============================================================================= 00038 00051 //------------------------------------------------------------------------------------ 00052 #ifndef CLASS_GEODETICFRAMES_INCLUDE 00053 #define CLASS_GEODETICFRAMES_INCLUDE 00054 00055 //------------------------------------------------------------------------------------ 00056 // GPSTk includes 00057 #include "Exception.hpp" 00058 #include "DayTime.hpp" 00059 #include "Matrix.hpp" 00060 00061 //------------------------------------------------------------------------------------ 00062 namespace gpstk 00063 { 00064 00228 class GeodeticFrames 00229 { 00230 //------------------------------------------------------------------------------ 00231 // constants 00234 static const long JulianEpoch; 00235 00236 //------------------------------------------------------------------------------ 00237 // functions used internally 00238 //------------------------------------------------------------------------------ 00243 static double CoordTransTime(DayTime t) 00244 throw(); 00245 00246 //------------------------------------------------------------------------------ 00251 static double Omega(double T) 00252 throw(); 00253 00254 //------------------------------------------------------------------------------ 00259 static double F(double T) 00260 throw(); 00261 00262 //------------------------------------------------------------------------------ 00267 static double D(double T) 00268 throw(); 00269 00270 //------------------------------------------------------------------------------ 00275 static double L(double T) 00276 throw(); 00277 00278 //------------------------------------------------------------------------------ 00283 static double Lp(double T) 00284 throw(); 00285 00286 //------------------------------------------------------------------------------ 00291 static double Obliquity(double T) 00292 throw(); 00293 00294 //------------------------------------------------------------------------------ 00300 static void NutationAngles(double T, 00301 double& deps, 00302 double& dpsi) 00303 throw(); 00304 00305 //------------------------------------------------------------------------------ 00312 static void UT1mUTCTidalCorrections(double T, 00313 double& UT1mUTR, 00314 double& dlodR, 00315 double& domegaR) 00316 throw(); 00317 00318 //------------------------------------------------------------------------------ 00352 static double gast(DayTime t, 00353 double om, 00354 double eps, 00355 double dpsi, 00356 double UT1mUTC) 00357 throw(); 00358 00359 //------------------------------------------------------------------------------ 00363 static Matrix<double> PrecessionMatrix(double T) 00364 throw(InvalidRequest); 00365 00366 //------------------------------------------------------------------------------ 00374 static Matrix<double> NutationMatrix(double eps, 00375 double dpsi, 00376 double deps) 00377 throw(InvalidRequest); 00378 00379 public: 00380 00381 //------------------------------------------------------------------------------ 00382 // public functions 00383 //------------------------------------------------------------------------------ 00391 static double GMST(DayTime t, 00392 double UT1mUTC, 00393 bool reduced=false) 00394 throw(); 00395 00396 //------------------------------------------------------------------------------ 00404 static double GAST(DayTime t, 00405 double UT1mUTC, 00406 bool reduced=false) 00407 throw(); 00408 00409 //------------------------------------------------------------------------------ 00415 static Matrix<double> PolarMotion(double xp, 00416 double yp) 00417 throw(InvalidRequest); 00418 00419 //------------------------------------------------------------------------------ 00427 static Matrix<double> PreciseEarthRotation(DayTime t, 00428 double UT1mUTC, 00429 bool reduced=false) 00430 throw(InvalidRequest); 00431 00432 //------------------------------------------------------------------------------ 00434 static Matrix<double> Precession(DayTime t) 00435 throw(InvalidRequest) 00436 { return PrecessionMatrix(CoordTransTime(t)); } 00437 00438 //------------------------------------------------------------------------------ 00442 static Matrix<double> Nutation(DayTime t) 00443 throw(InvalidRequest); 00444 00445 //------------------------------------------------------------------------------ 00458 static Matrix<double> ECEFtoInertial(DayTime t, 00459 double xp, 00460 double yp, 00461 double UT1mUTC, 00462 bool reduced=false) 00463 throw(InvalidRequest); 00464 00465 //------------------------------------------------------------------------------ 00470 static void ResolveRotation(const Matrix<double>& R, 00471 double& theta, 00472 double& phi, 00473 double& psi, 00474 double& alpha, 00475 Vector<double>& nhat) 00476 throw(InvalidRequest); 00477 00478 }; // end class GeodeticFrames 00479 00480 } // end namespace gpstk 00481 00482 #endif // nothing below this...
1.3.9.1