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);
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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;
 }