/// <summary>
 /// Θ = MEarth + ΠEarth + 15° (t+tz) (mod360°)
 /// </summary>
 /// <param name="meanAnomaly"></param>
 /// <param name="minuteConstant">degree ratation per minute</param>
 /// <param name="keplerianOrbitValue"></param>
 /// <param name="utcMinutes"></param>
 /// <returns></returns>
 private static double GetSiderealTime(
     double meanAnomaly,
     double minuteConstant,
     KeplerianOrbitValueModel keplerianOrbitValue,
     int utcMinutes)
 {
     return(DegreeHelper.Modulo360Absolute(meanAnomaly + keplerianOrbitValue.Pi + (minuteConstant * utcMinutes)));
 }
 public static double GetSiderealTime(
     this CelestialObjectPositionModel celestialObjectPosition,
     CelestialObjectModel celestialObject,
     KeplerianOrbitValueModel keplerianOrbitValue,
     DateTimeOffset referenceDate)
 {
     return(celestialObjectPosition.GetCelestialObjectSiderealTime(celestialObject, keplerianOrbitValue, (int)Math.Round(referenceDate.TimeOfDay.TotalMinutes), referenceDate.Offset.Minutes));
 }
 /// <summary>
 /// Θ = MEarth + ΠEarth + 15° (t+tz) (mod360°)
 /// </summary>
 /// <param name="celestialObjectPosition">
 /// The celestial Object Position.</param>
 /// <param name="minuteConstant">degree ratation per minute</param>
 /// <param name="keplerianOrbitValue"></param>
 /// <param name="utcMinutes"></param>
 /// <returns></returns>
 private static double GetSiderealTime(
     this CelestialObjectPositionModel celestialObjectPosition,
     double minuteConstant,
     KeplerianOrbitValueModel keplerianOrbitValue,
     int utcMinutes)
 {
     return(GetSiderealTime(celestialObjectPosition.MeanAnomaly, minuteConstant, keplerianOrbitValue, utcMinutes));
 }
 public static double GetCelestialObjectSiderealTime(
     this CelestialObjectPositionModel celestialObjectPosition,
     CelestialObjectModel celestialObject,
     KeplerianOrbitValueModel keplerianOrbitValue,
     int minute,
     int minuteOffset)
 {
     return(celestialObjectPosition.GetCelestialObjectSiderealTime(celestialObject, keplerianOrbitValue, minute - minuteOffset));
 }
        /// <summary>
        /// Θ = MEarth + ΠEarth + 15° (t+tz) (mod360°)
        /// </summary>
        /// <param name="celestialObjectPosition">
        /// The celestial Object Position.</param>
        /// <param name="celestialObject">The celestial Object.</param>
        /// <param name="keplerianOrbitValue"></param>
        /// <param name="utcMinutes"></param>
        /// <returns></returns>
        private static double GetCelestialObjectSiderealTime(
            this CelestialObjectPositionModel celestialObjectPosition,
            CelestialObjectModel celestialObject,
            KeplerianOrbitValueModel keplerianOrbitValue,
            int utcMinutes)
        {
            var minuteConstant = celestialObject.SiderealRotationPeriod / (int)Interval.Day;

            return(celestialObjectPosition.GetSiderealTime(minuteConstant, keplerianOrbitValue, utcMinutes));
        }