Example #1
0
        private CrdsEcliptical NeptuneMoon_Ecliptical(SkyContext c, int m)
        {
            var eclNeptune = c.Get(Planet_Ecliptical, Planet.NEPTUNE);

            return(NeptunianMoons.Position(c.JulianDay, eclNeptune, m));
        }
        public void Positions()
        {
            // Test data is obtained from NASA JPL Ephemeris tool
            // https://ssd.jpl.nasa.gov/horizons.cgi

            List <TestData> testDatas = new List <TestData>()
            {
                // Triton
                // 2020-Jan-07 13:00 2458856.041666667    -0.964   12.797
                new TestData()
                {
                    MoonNumber = 1,
                    Neptune    = new CrdsEcliptical(new DMS("346* 24' 16.12''"), new DMS("-1* 01' 26.26''"), 30.416),
                    JulianDay  = 2458856.041666667,
                    X          = -0.964,
                    Y          = 12.797
                },

                // Triton
                // 2025-Jan-22 19:00 2460698.291666667        1.086  -12.382
                new TestData()
                {
                    MoonNumber = 1,
                    Neptune    = new CrdsEcliptical(new DMS("357° 43' 31.73''"), new DMS("-1° 16' 24.69''"), 30.416),
                    JulianDay  = 2460698.291666667,
                    X          = 1.086,
                    Y          = -12.382
                },

                // Nereid
                // 2020-Feb-27 00:00 2458906.500000000        5.124   10.556
                new TestData()
                {
                    MoonNumber = 2,
                    Neptune    = new CrdsEcliptical(new DMS("348* 00' 11.97''"), new DMS("-1* 00' 54.27''"), 30.906),
                    JulianDay  = 2458906.5,
                    X          = 5.124,
                    Y          = 10.556
                },

                // Nereid
                // 2020-Jul-13 00:00 2459043.500000000      384.491  206.269
                new TestData()
                {
                    MoonNumber = 2,
                    Neptune    = new CrdsEcliptical(new DMS("350* 51' 10.8''"), new DMS("-1* 05' 15.56''"), 29.405),
                    JulianDay  = 2459043.5,
                    X          = 384.491,
                    Y          = 206.269
                },

                // Nereid
                // 1980-Jan-01 00:00 2444239.500000000      135.407   32.771
                new TestData()
                {
                    MoonNumber = 2,
                    Neptune    = new CrdsEcliptical(new DMS("260* 55' 41.93''"), new DMS("+1* 20' 26.28''"), 31.209),
                    JulianDay  = 2444239.5,
                    X          = 135.407,
                    Y          = 32.771
                }
            };

            // possible error in coordinates is 1 arcsecond
            const double error = 1;

            foreach (var testData in testDatas)
            {
                NutationElements ne           = Nutation.NutationElements(testData.JulianDay);
                double           epsilon      = Date.TrueObliquity(testData.JulianDay, ne.deltaEpsilon);
                CrdsEcliptical   eclSatellite = NeptunianMoons.Position(testData.JulianDay, testData.Neptune, testData.MoonNumber);

                CrdsEquatorial eqNeptune   = testData.Neptune.ToEquatorial(epsilon);
                CrdsEquatorial eqSatellite = eclSatellite.ToEquatorial(epsilon);

                double X = (eqSatellite.Alpha - eqNeptune.Alpha) * Math.Cos(Angle.ToRadians(eqNeptune.Delta)) * 3600;
                double Y = (eqSatellite.Delta - eqNeptune.Delta) * 3600;

                Assert.AreEqual(testData.X, X, error);
                Assert.AreEqual(testData.Y, Y, error);
            }
        }