Exemple #1
0
        /// <summary>
        /// Standard constructor.
        /// </summary>
        /// <param name="tle">Two-line element orbital parameters.</param>
        public Orbit(Tle tle)
        {
            Tle   = tle;
            Epoch = Tle.EpochJulian;

            m_Inclination   = GetRad(Tle.Field.Inclination);
            m_Eccentricity  = Tle.GetField(Tle.Field.Eccentricity);
            m_RAAN          = GetRad(Tle.Field.Raan);
            m_ArgPerigee    = GetRad(Tle.Field.ArgPerigee);
            m_BStar         = Tle.GetField(Tle.Field.BStarDrag);
            m_Drag          = Tle.GetField(Tle.Field.MeanMotionDt);
            m_MeanAnomaly   = GetRad(Tle.Field.MeanAnomaly);
            m_TleMeanMotion = Tle.GetField(Tle.Field.MeanMotion);

            // Recover the original mean motion and semimajor axis from the
            // input elements.
            double mm    = TleMeanMotion;
            double rpmin = mm * Globals.TwoPi / Globals.MinPerDay; // rads per minute

            double a1   = Math.Pow(Globals.Xke / rpmin, 2.0 / 3.0);
            double e    = Eccentricity;
            double i    = Inclination;
            double temp = (1.5 * Globals.Ck2 * (3.0 * Globals.Sqr(Math.Cos(i)) - 1.0) /
                           Math.Pow(1.0 - e * e, 1.5));
            double delta1 = temp / (a1 * a1);
            double a0     = a1 *
                            (1.0 - delta1 *
                             ((1.0 / 3.0) + delta1 *
                              (1.0 + 134.0 / 81.0 * delta1)));

            double delta0 = temp / (a0 * a0);

            m_rmMeanMotionRec    = rpmin / (1.0 + delta0);
            m_aeAxisSemiMajorRec = a0 / (1.0 - delta0);
            m_aeAxisSemiMinorRec = m_aeAxisSemiMajorRec * Math.Sqrt(1.0 - (e * e));
            m_kmPerigeeRec       = Globals.Xkmper * (m_aeAxisSemiMajorRec * (1.0 - e) - Globals.Ae);
            m_kmApogeeRec        = Globals.Xkmper * (m_aeAxisSemiMajorRec * (1.0 + e) - Globals.Ae);

            if (Period.TotalMinutes >= 225.0)
            {
                // SDP4 - period >= 225 minutes.
                NoradModel = new NoradSDP4(this);
            }
            else
            {
                // SGP4 - period < 225 minutes
                NoradModel = new NoradSGP4(this);
            }
        }
Exemple #2
0
        /// <summary>
        /// Standard constructor.
        /// </summary>
        /// <param name="tle">Two-line element orbital parameters.</param>
        public Orbit(Tle tle)
        {
            Tle     = tle;
             Epoch = Tle.EpochJulian;

             m_Inclination   = GetRad(Tle.Field.Inclination);
             m_Eccentricity  = Tle.GetField(Tle.Field.Eccentricity);
             m_RAAN          = GetRad(Tle.Field.Raan);
             m_ArgPerigee    = GetRad(Tle.Field.ArgPerigee);
             m_BStar         = Tle.GetField(Tle.Field.BStarDrag);
             m_Drag          = Tle.GetField(Tle.Field.MeanMotionDt);
             m_MeanAnomaly   = GetRad(Tle.Field.MeanAnomaly);
             m_TleMeanMotion = Tle.GetField(Tle.Field.MeanMotion);

             // Recover the original mean motion and semimajor axis from the
             // input elements.
             double mm     = TleMeanMotion;
             double rpmin  = mm * Globals.TwoPi / Globals.MinPerDay;   // rads per minute

             double a1     = Math.Pow(Globals.Xke / rpmin, 2.0 / 3.0);
             double e      = Eccentricity;
             double i      = Inclination;
             double temp   = (1.5 * Globals.Ck2 * (3.0 * Globals.Sqr(Math.Cos(i)) - 1.0) /
                         Math.Pow(1.0 - e * e, 1.5));
             double delta1 = temp / (a1 * a1);
             double a0     = a1 *
                        (1.0 - delta1 *
                        ((1.0 / 3.0) + delta1 *
                        (1.0 + 134.0 / 81.0 * delta1)));

             double delta0 = temp / (a0 * a0);

             m_rmMeanMotionRec    = rpmin / (1.0 + delta0);
             m_aeAxisSemiMajorRec = a0 / (1.0 - delta0);
             m_aeAxisSemiMinorRec = m_aeAxisSemiMajorRec * Math.Sqrt(1.0 - (e * e));
             m_kmPerigeeRec       = Globals.Xkmper * (m_aeAxisSemiMajorRec * (1.0 - e) - Globals.Ae);
             m_kmApogeeRec        = Globals.Xkmper * (m_aeAxisSemiMajorRec * (1.0 + e) - Globals.Ae);

             if (Period.TotalMinutes >= 225.0)
             {
            // SDP4 - period >= 225 minutes.
            NoradModel = new NoradSDP4(this);
             }
             else
             {
            // SGP4 - period < 225 minutes
            NoradModel = new NoradSGP4(this);
             }
        }
Exemple #3
0
 // ///////////////////////////////////////////////////////////////////
 protected double GetDeg(Tle.Field fld)
 {
     return(Tle.GetField(fld, Tle.Unit.Degrees));
 }
Exemple #4
0
 // ///////////////////////////////////////////////////////////////////
 protected double GetRad(Tle.Field fld)
 {
     return(Tle.GetField(fld, Tle.Unit.Radians));
 }
Exemple #5
0
 // ///////////////////////////////////////////////////////////////////
 protected double GetDeg(Tle.Field fld) => Tle.GetField(fld, Tle.Unit.Degrees);
Exemple #6
0
 // ///////////////////////////////////////////////////////////////////
 protected double GetRad(Tle.Field fld) => Tle.GetField(fld, Tle.Unit.Radians);