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); }
public void GetKeplerianCalculateTest() { var jupiter = KeplerianValueConstants.PlanetKeplerianModels.Single(x => x.SolarSystemObject == CelestialObject.Jupiter); var earth = KeplerianValueConstants.PlanetKeplerianModels.Single(x => x.SolarSystemObject == CelestialObject.Earth); var referenceDate = new DateTimeOffset(2004, 1, 1, 0, 0, 0, TimeSpan.Zero); var jupiterDateModel = jupiter.GetKeplerianDateModel(referenceDate); var earthDateModel = earth.GetKeplerianDateModel(referenceDate); var jupiterCalculate = new KeplerianCalculationModel(jupiterDateModel); var earthCalculate = new KeplerianCalculationModel(earthDateModel); var jupiterX = jupiterCalculate.Location.X; var jupiterY = jupiterCalculate.Location.Y; var jupiterZ = jupiterCalculate.Location.Z; var earthX = earthCalculate.Location.X; var earthY = earthCalculate.Location.Y; var earthZ = earthCalculate.Location.Z; Assert.True(jupiterX.EqualsWithinTolerance(-4.9852, 4)); Assert.True(jupiterY.EqualsWithinTolerance(2.0689, 4)); Assert.True(jupiterZ.EqualsWithinTolerance(0.1030, 4)); Assert.True(earthX.EqualsWithinTolerance(-0.1779, 4)); Assert.True(earthY.EqualsWithinTolerance(0.9670, 4)); Assert.True(earthZ.EqualsWithinTolerance(0, 4)); }
public void GetKeplerianCalculationTest() { var jupiter = KeplerianValueConstants.PlanetKeplerianModels.Single(x => x.SolarSystemObject == CelestialObject.Jupiter); var earth = KeplerianValueConstants.PlanetKeplerianModels.Single(x => x.SolarSystemObject == CelestialObject.Earth); var referenceDate = new DateTimeOffset(2004, 1, 1, 0, 0, 0, TimeSpan.Zero); var jupiterDateModel = jupiter.GetKeplerianDateModel(referenceDate); var earthDateModel = earth.GetKeplerianDateModel(referenceDate); var jupiterCalculate = new KeplerianCalculationModel(jupiterDateModel); var earthCalculate = new KeplerianCalculationModel(earthDateModel); jupiterCalculate.SetEarthPosition(earthCalculate.Location, earthCalculate.CentricDistance); var actualLargeDelta = jupiterCalculate.LargeDelta; var actualEclipticLongitude = jupiterCalculate.EclipticLongitude; var actualEclipticLatitude = jupiterCalculate.EclipticLatitude; var actualDeclination = jupiterCalculate.Declination; var actualRightAscension = jupiterCalculate.RightAscension; var expectedLargeDelta = 4.933; var expectedEclipticLongitude = 167.0899; var expectedEclipticLatitude = 1.1969; var expectedDeclination = 6.2012; var expectedRightAscension = 168.5924; Assert.True(expectedLargeDelta.EqualsWithinTolerance(actualLargeDelta, 2)); Assert.True(expectedEclipticLongitude.EqualsWithinTolerance(actualEclipticLongitude, 2)); Assert.True(expectedEclipticLatitude.EqualsWithinTolerance(actualEclipticLatitude, 2)); Assert.True(expectedDeclination.EqualsWithinTolerance(actualDeclination, 2)); Assert.True(expectedRightAscension.EqualsWithinTolerance(actualRightAscension, 2)); }
public CelestialObjectPositionModel( Guid celestialObjectId, DateTimeOffset referenceDate, KeplerianCalculationModel calculationModel) : this( celestialObjectId, referenceDate, calculationModel.Location, calculationModel.AverageCentricDistance, calculationModel.CentricDistance, calculationModel.LargeDelta, calculationModel.EclipticLongitude, calculationModel.EclipticLatitude, calculationModel.Declination, calculationModel.RightAscension, calculationModel.RatioSunEarthDistance, calculationModel.RatioEarthAuDistance, calculationModel.MeanAnomaly.Degrees) { Id = Guid.NewGuid(); CelestialObjectId = celestialObjectId; ReferenceDate = referenceDate; }