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