⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 geodeticframes.hpp

📁 一个gps小工具包
💻 HPP
📖 第 1 页 / 共 2 页
字号:
#pragma ident "$Id: GeodeticFrames.hpp 293 2006-11-10 16:39:56Z rickmach $"//============================================================================////  This file is part of GPSTk, the GPS Toolkit.////  The GPSTk is free software; you can redistribute it and/or modify//  it under the terms of the GNU Lesser General Public License as published//  by the Free Software Foundation; either version 2.1 of the License, or//  any later version.////  The GPSTk is distributed in the hope that it will be useful,//  but WITHOUT ANY WARRANTY; without even the implied warranty of//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the//  GNU Lesser General Public License for more details.////  You should have received a copy of the GNU Lesser General Public//  License along with GPSTk; if not, write to the Free Software Foundation,//  Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA//  //  Copyright 2004, The University of Texas at Austin////============================================================================//============================================================================////This software developed by Applied Research Laboratories at the University of//Texas at Austin, under contract to an agency or agencies within the U.S. //Department of Defense. The U.S. Government retains all rights to use,//duplicate, distribute, disclose, or release this software. ////Pursuant to DoD Directive 523024 //// DISTRIBUTION STATEMENT A: This software has been approved for public //                           release, distribution is unlimited.////=============================================================================/** * @file GeodeticFrames.hpp * Include file defining the GeodeticFrames class. * class gpstk::GeodeticFrames encapsulates frame transformations between the * conventional terrestrial frame and the conventional inertial frame, as defined * by the reference. It implements models of precession and nutation of * Earth's axis, as well as the precise rotation of Earth and its 'wobble' * as given by the Earth orientation parameters (see class EarthOrientation). * Reference: IERS Technical Note 21, IERS Conventions (1996), * Dennis D. McCarthy, U.S. Naval Observatory, especially Chapter 5.  *///------------------------------------------------------------------------------------#ifndef CLASS_GEODETICFRAMES_INCLUDE#define CLASS_GEODETICFRAMES_INCLUDE//------------------------------------------------------------------------------------// GPSTk includes#include "Exception.hpp"#include "DayTime.hpp"#include "Matrix.hpp"//------------------------------------------------------------------------------------namespace gpstk{   /** Class GeodeticFrames encapsulates frame transformations between the     * conventional terrestrial frame and the conventional inertial frame, as defined     * by the reference. It implements models of precession and nutation (IERS 1996)     * of Earth's axis, as well as the precise rotation of Earth and its 'wobble'     * as given by the Earth orientation parameters (see class EarthOrientation).     *     * Reference: IERS Technical Note 21, IERS Conventions (1996),     * Dennis D. McCarthy, U.S. Naval Observatory.     *     * The conventional terrestrial system (CTS) or Earth-centered,     * Earth-fixed frame (ECEF), is related to the conventional inertial system     * (CIS) by four things: a) precession and b) nutation of the Earth and     * c) Earth rotation and d) polar motion. The transformation between a vector     * X(CTS) in the terrestrial (ECEF) frame and the vector X(CIS) in the inertial     * frame is     *     * <pre>     * X(CIS) = P * N * R * W * X(CTS)     *    where     * W is the transformation using Earth Orientation Parameters     *    xp, yp (pole coordinates obtained from the IERS bulletin),     * R is the effect of both Earth rotation and     *    precession and nutation in the right ascension,     * N is the nutation matrix,     * P is the precession matrix.     *     * Reference: IERS Technical Note 21, IERS Conventions (1996), Chapter 5.     *     * IF     *   R1(a) =  [ 1    0      0    ]     *            [ 0  cos(a) sin(a) ]     *            [ 0 -sin(a) cos(a) ]     *     *   R2(b) =  [ cos(b) 0 -sin(b) ]     *            [   0    1    0    ]     *            [ sin(b) 0  cos(b) ]     *     *   R3(c) =  [  cos(c) sin(c) 0 ]     *            [ -sin(c) cos(c) 0 ]     *            [    0      0    1 ]     *     * and if     *     *   T = (t-t0)(in days)/36525.0 days     *   where     *   t0 = J2000 = January 1 2000 12h UT = 2451545.0JD     *     * THEN ----------------------------------------------------------------     *  [PRECESSION IAU76]     *     *   P = R3(zeta)*R2(-theta)*R3(z)     *  where     *   zeta  = 2306.2181*T + 0.30188*T^2 + 0.017998*T^3 seconds of arc     *   theta = 2004.3109*T - 0.42665*T^2 - 0.041833*T^3 seconds of arc     *   z     = 2306.2181*T + 1.09468*T^2 + 0.018203*T^3 seconds of arc     *     * AND -----------------------------------------------------------------     *  [NUTATION IAU76]     *     *   N = R1(-eps)*R3(dpsi)*R1(eps+deps)     *  where     *   eps  = obliquity of the ecliptic     *   deps = nutation in obliquity     *   dpsi = nutation in longitude (counted in the ecliptic)     *     *   eps = (84381.448 - 46.8150*T - 0.00059*T^2 +0.001813*T^3) seconds of arc     *     *  and the principal terms in the series for the other two parameters are     *  ( " denotes seconds of arc)     *     *  (IAU76)     *   deps   =     *     ( 9.205356 + 0.000886*T)*cos(Omega)"       + 0.001553*sin(Omega)"     *   + ( 0.573058 - 0.000306*T)*cos(2F-2D+2Omega)"- 0.000464*sin(2F-2D+2Omega)"     *   + ( 0.097864 - 0.000048*T)*cos(2F+2Omega)"   + 0.000136*sin(2F+2Omega)"     *   + (-0.089747 + 0.000047*T)*cos(2Omega)"      - 0.000029*sin(2Omega)"     *   + ( 0.007388 - 0.000019*T)*cos(-L')"         + 0.000198*sin(-L')"     *   + ( 0.022440 - 0.000068*T)*cos(Larg)"        - 0.000018*sin(Larg)"     *   + (-0.000687 + 0.000000*T)*cos(L)"           - 0.000039*sin(L)"     *   etc...     *   dpsi   =          *     (-17.206277- 0.017419*T)*sin(Omega)"       + 0.003645*cos(Omega)"     *   + (-1.317014 - 0.000156*T)*sin(2F-2D+2Omega)"- 0.001400*cos(2F-2D+2Omega)"     *   + (-0.227720 - 0.000023*T)*sin(2F+2Omega)"   + 0.000269*cos(2F+2Omega)"     *   + ( 0.207429 + 0.000021*T)*sin(2Omega)"      - 0.000071*cos(2Omega)"     *   + (-0.147538 + 0.000364*T)*sin(-L')"         + 0.001121*cos(-L')"     *   + (-0.051687 + 0.000123*T)*sin(Larg)"        - 0.000054*cos(Larg)"     *   + ( 0.071118 + 0.000007*T)*sin(L)"           - 0.000094*cos(L)"     *   etc...     * OR     *     *  (IERS 1980)     *   deps   =   ( 9.2025 + 0.00089*T)*cos(Omega)"     *            + ( 0.5736 - 0.00031*T)*cos(2F-2D+2Omega)"     *            + ( 0.0977 - 0.00005*T)*cos(2F+2Omega)"     *            + (-0.0895 + 0.00005*T)*cos(2Omega)"     *            + ( 0.0054 - 0.00001*T)*cos(-L')"     *            + (-0.0007 + 0.00000*T)*cos(L)"     *   etc...     *   dpsi   =   (-17.1996- 0.01742*T)*sin(Omega)"     *            + (-1.3187 - 0.00016*T)*sin(2F-2D+2Omega)"     *            + (-0.2274 - 0.00002*T)*sin(2F+2Omega)"     *            + ( 0.2062 + 0.00002*T)*sin(2Omega)"     *            + (-0.1426 + 0.00034*T)*sin(-L')"     *            + ( 0.0712 + 0.00001*T)*sin(L)"     *   etc...     *  with     *     *   Larg    = L'+2F-2D+2Omega     *     *   Omega   = mean longitude of the lunar ascending node     *           = 125.04455501 degrees - 6962890.2665"*T + 7.4722"*T^2     *               + 0.007702"*T^3 - 0.00005939"*T^4     *     *   D       = mean elongation of the moon from the sun     *           = 297.85019547 degrees + 1602961601.2090"*T - 6.3706"*T^2     *               + 0.006593"*T^3 - 0.00003169"*T^4     *     *   F       = mean longitude of the moon - Omega     *           = 93.27209062 degrees + 1739527262.8478"*T - 12.7512"*T^2     *               - 0.001037"*T^3 + 0.00000417"*T^4     *     *   L'      = mean anomaly of the sun     *           = 357.52910918 degrees + 129596581.0481"*T - 0.5532"*T^2     *               + 0.000136"*T^3 - 0.00001149"*T^4     *     *   L       = mean anomaly of the moon     *           = 134.96340251 degrees + 1717915923.2178"*T + 31.8792"*T^2     *               +0.051635"*T^3 -0.00024470"*T^4     *     * AND -----------------------------------------------------------------     *     *   R = R3(-GAST)     *     *   GAST = Greenwich hour angle of the true vernal equinox     *   GAST = Greenwich Apparent Sidereal Time     *   GAST = GMST + dpsi*cos(eps) + 0.00264"*sin(Omega) +0.000063"*sin(2*Omega)     *      (these terms account for the accumulated precession and nutation in     *         right ascension and minimize any discontinuity in UT1)     *     *   GMST = Greenwich hour angle of the mean vernal equinox     *        = Greenwich Mean Sidereal Time     *        = GMST0 + r*[(UT1-UTC)+UTC]     *   r    = is the ratio of universal to sidereal time     *        = 1.002737909350795 + 5.9006E-11*T' - 5.9e-15*T'^2     *   T'   = days'/36525     *   days'= number of days elapsed since t0 = +/-(integer+0.5)     *      and     *   (UT1-UTC) is taken from the IERS bulletin (seconds)     *     *   GMST0 = GMST at 0h UT1     *        = 6h 41m (50.54841+8640184.812866*T'+0.093104*T'^2-6.2E-6*T'^3)s     *     * AND -----------------------------------------------------------------     *     *   W = R1(yp)*R2(xp)     *   where xp and yp are the polar coordinates of the celestial ephemeris pole,     *      taken from the IERS bulletin. (NB in the bulletin they are in units     *      of arcseconds, and they must be converted to radians by multiplying     *      by pi/180/3600.)     *     * </pre>     */   class GeodeticFrames   {      //------------------------------------------------------------------------------      // constants      /// Epoch for the coordinate transformation time, used throughout the formulas      /// = J2000 = January 1 2000 12h UT      static const long JulianEpoch;      //------------------------------------------------------------------------------      // functions used internally      //------------------------------------------------------------------------------      /// Compute the 'coordinate transformation time', which is used throughout the      /// class, and is essentially the time since J2000 in centuries.      /// @param t DayTime time of interest.      /// @return coordinate transformation time at t.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -