/// <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); }