private List <CelestialObjectPositionModel> SeedPlanet(CelestialObject planet, Dictionary <DateTimeOffset, CelestialObjectPositionModel> earthPositions)
        {
            var result            = new List <CelestialObjectPositionModel>();
            var celestialObjectId = CelestialObjectDictionary[planet.ToConstant()];
            var referenceDate     = new DateTimeOffset(1950, 1, 1, 0, 0, 0, TimeSpan.Zero);
            var endDate           = new DateTimeOffset(2100, 1, 1, 0, 0, 0, TimeSpan.Zero);
            var keplerianModel    = KeplerianValueConstants.PlanetKeplerianModels.Single(x => x.SolarSystemObject == planet);

            while (referenceDate <= endDate)
            {
                var dateModel        = new KeplerianDateModel(referenceDate, keplerianModel);
                var calculationModel = new KeplerianCalculationModel(dateModel);

                if (earthPositions != null)
                {
                    var earthPosition = earthPositions[referenceDate];
                    calculationModel.SetEarthPosition(earthPosition.Location, earthPosition.CentricDistance);
                }

                var positionModel = planet == CelestialObject.Earth
                    ? new CelestialObjectPositionModel(celestialObjectId, referenceDate, calculationModel.Location, 1, calculationModel.CentricDistance)
                    : new CelestialObjectPositionModel(celestialObjectId, referenceDate, calculationModel);

                result.Add(positionModel);

                referenceDate = referenceDate.AddDays(1);
            }

            return(result);
        }
Exemple #2
0
        ///// <summary>
        ///// Compute the angle in degrees per day 'n'
        ///// </summary>
        ///// <param name="model"></param>
        ///// <returns></returns>
        //public static double GetAnglePerDay(this KeplerianDateModel model)
        //{
        //    return KeplerianHelper.GetAnglePerDay(model.Values.SemiMajorAxis);
        //}

        ///// <summary>
        ///// Compute the mean anomaly 'M'
        ///// </summary>
        ///// <param name="model"></param>
        ///// <returns></returns>
        //public static double GetMeanAnomaly(this KeplerianDateModel model)
        //{
        //    return (model.Values.MeanLongitude - model.Values.PerihelionLongitude) % 360;
        //}

        ///// <summary>
        ///// Compute the mean anomaly 'M'
        ///// </summary>
        ///// <param name="model"></param>
        ///// <returns></returns>
        //public static double GetMeanAnomalyForDay(this KeplerianDateModel model)
        //{
        //    return (model.Values.MeanLongitude - model.Values.PerihelionLongitude) % 360;
        //}

        /// <summary>
        /// Compute the true anomaly 'ν'
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public static double GetEccentricAnomaly(this KeplerianDateModel model)
        {
            var eccentricity = model.Values.Eccentricity;
            var meanAnomaly  = model.Values.GetMeanAnomaly360();

            return(KeplerianHelper.GetEccentricAnomaly(eccentricity, meanAnomaly));
        }