示例#1
0
        /// <summary>
        /// 计算大气延迟。 Computes the acceleration due to the atmospheric drag.
        /// </summary>
        /// <param name="Mjd_TT">Mjd_TT      Terrestrial Time (Modified Julian Date)</param>
        /// <param name="satXyz">r           Satellite position vector in the inertial system [m]</param>
        /// <param name="satVelocity"> v           Satellite velocity vector in the inertial system [m/s]</param>
        /// <param name="transMatrix"> T           Transformation matrix to true-of-date inertial system</param>
        /// <param name="Area">Area        Cross-section [m^2]</param>
        /// <param name="mass"> mass        Spacecraft mass [kg]</param>
        /// <param name="atmosDragCoeff"> coefOfDrag          Drag coefficient</param>
        /// <returns>Acceleration (a=d^2r/dt^2) [m/s^2]</returns>
        public static Geo.Algorithm.Vector AccelerDragOfAtmos(double Mjd_TT, Geo.Algorithm.Vector satXyz, Geo.Algorithm.Vector satVelocity,
                                                              Matrix transMatrix, double Area, double mass, double atmosDragCoeff)
        {
            // Earth angular velocity vector [rad/s]
            double[]             Data_omega = { 0.0, 0.0, 7.29212e-5 };
            Geo.Algorithm.Vector omega      = new Geo.Algorithm.Vector(Data_omega, 3);

            // Variables
            double v_abs, dens;

            Geo.Algorithm.Vector r_tod = new Geo.Algorithm.Vector(3), v_tod = new Geo.Algorithm.Vector(3);
            Geo.Algorithm.Vector v_rel = new Geo.Algorithm.Vector(3), a_tod = new Geo.Algorithm.Vector(3);
            Matrix T_trp = new Matrix(3, 3);

            // Transformation matrix to ICRF/EME2000 system
            T_trp = transMatrix.Transpose();

            // Position and velocity in true-of-date system
            r_tod = transMatrix * satXyz;
            v_tod = transMatrix * satVelocity;

            // Velocity relative to the Earth's atmosphere
            v_rel = v_tod - omega.Cross3D(r_tod);
            v_abs = v_rel.Norm();

            // Atmospheric density due to modified Harris-Priester model
            dens = TerrestrialUtil.AtmosDensity_HP(Mjd_TT, r_tod);

            // Acceleration
            a_tod = -0.5 * atmosDragCoeff * (Area / mass) * dens * v_abs * v_rel;

            return(T_trp * a_tod);
        }
        /// <summary>
        ///  A_Diff: Function computes the difference of acceleration due to SRP and DRG
        /// </summary>
        /// <param name="h"> h         Height [m]</param>
        /// <returns>Difference of acceleration</returns>
        public static double A_Diff(double h)
        {
            double CD     = 2.3;     // Spacecraft parameters
            double CR     = 1.3;
            double Mjd_TT = 51269.0; // State epoch

            Vector r    = new Vector(1.0, 0.0, 0.0) * (Force.Grav.R_ref + h);
            double dens = TerrestrialUtil.AtmosDensity_HP(Mjd_TT, r);

            return((0.5 * CD * dens * Force.Grav.GM / (Force.Grav.R_ref + h)) - (OrbitConsts.PressureOfSolarRadiationPerAU * CR));
        }