Ejemplo n.º 1
0
        /// <summary>
        /// PreciseOrbital Velocy in polar coordinates
        ///
        /// </summary>
        /// <returns>item1 is speed, item2 angle</returns>
        /// <param name="orbit">Orbit.</param>
        /// <param name="atDateTime">At date time.</param>
        public static (double speed, double angle) InstantaneousOrbitalVelocityPolarCoordinate(OrbitDB orbit, DateTime atDateTime)
        {
            var position = GetPosition_AU(orbit, atDateTime);
            var sma      = orbit.SemiMajorAxis;

            if (orbit.GravitationalParameter == 0 || sma == 0)
            {
                return(0, 0); //so we're not returning NaN;
            }
            var sgp = orbit.GravitationalParameterAU;

            double e = orbit.Eccentricity;

            double trueAnomaly = GetTrueAnomaly(orbit, atDateTime);
            double loAN        = Angle.ToRadians(orbit.LongitudeOfAscendingNode);
            double aoP         = Angle.ToRadians(orbit.ArgumentOfPeriapsis);
            double inclination = Angle.ToRadians(orbit.Inclination);
            var    loP         = OrbitMath.GetLongditudeOfPeriapsis(inclination, aoP, loAN);

            (double speed, double angle)polar = OrbitMath.InstantaneousOrbitalVelocityPolarCoordinate(sgp, position, sma, e, trueAnomaly);
            polar.angle += loP;
            return(polar);
        }