예제 #1
0
        public void JulianHours()
        {
            double j1 = CalendricalHelper.JulianDay(/* year */ 2010, /* month */ 1, /* day */ 3);
            double j2 = CalendricalHelper.JulianDay(/* year */ 2010,
                                                    /* month */ 1, /* day */ 1, /* hours */ 48);

            Assert.IsTrue(j1.IsWithin(0.0000001, j2));
        }
예제 #2
0
        public void JulianDay()
        {
            /*
             * Comparison values generated from http://aa.usno.navy.mil/data/docs/JulianDate.php
             */

            Assert.IsTrue(CalendricalHelper.JulianDay(/* year */ 2010, /* month */ 1, /* day */ 2)
                          .IsWithin(0.00001, 2455198.500000));
            Assert.IsTrue(CalendricalHelper.JulianDay(/* year */ 2011, /* month */ 2, /* day */ 4)
                          .IsWithin(0.00001, 2455596.500000));
            Assert.IsTrue(CalendricalHelper.JulianDay(/* year */ 2012, /* month */ 3, /* day */ 6)
                          .IsWithin(0.00001, 2455992.500000));
            Assert.IsTrue(CalendricalHelper.JulianDay(/* year */ 2013, /* month */ 4, /* day */ 8)
                          .IsWithin(0.00001, 2456390.500000));
            Assert.IsTrue(CalendricalHelper.JulianDay(/* year */ 2014, /* month */ 5, /* day */ 10)
                          .IsWithin(0.00001, 2456787.500000));
            Assert.IsTrue(CalendricalHelper.JulianDay(/* year */ 2015, /* month */ 6, /* day */ 12)
                          .IsWithin(0.00001, 2457185.500000));
            Assert.IsTrue(CalendricalHelper.JulianDay(/* year */ 2016, /* month */ 7, /* day */ 14)
                          .IsWithin(0.00001, 2457583.500000));
            Assert.IsTrue(CalendricalHelper.JulianDay(/* year */ 2017, /* month */ 8, /* day */ 16)
                          .IsWithin(0.00001, 2457981.500000));
            Assert.IsTrue(CalendricalHelper.JulianDay(/* year */ 2018, /* month */ 9, /* day */ 18)
                          .IsWithin(0.00001, 2458379.500000));
            Assert.IsTrue(CalendricalHelper.JulianDay(/* year */ 2019, /* month */ 10, /* day */ 20)
                          .IsWithin(0.00001, 2458776.500000));
            Assert.IsTrue(CalendricalHelper.JulianDay(/* year */ 2020, /* month */ 11, /* day */ 22)
                          .IsWithin(0.00001, 2459175.500000));
            Assert.IsTrue(CalendricalHelper.JulianDay(/* year */ 2021, /* month */ 12, /* day */ 24)
                          .IsWithin(0.00001, 2459572.500000));

            double jdVal = 2457215.67708333;

            Assert.IsTrue(
                CalendricalHelper.JulianDay(/* year */ 2015, /* month */ 7, /* day */ 12, /* hours */ 4.25)
                .IsWithin(0.000001, jdVal));

            DateTime components = TestUtils.MakeDate(/* year */ 2015, /* month */ 7, /* day */ 12,
                                                     /* hour */ 4, /* minute */ 15);

            Assert.IsTrue(CalendricalHelper.JulianDay(components).IsWithin(0.000001, jdVal));

            Assert.IsTrue(CalendricalHelper
                          .JulianDay(/* year */ 2015, /* month */ 7, /* day */ 12, /* hours */ 8.0)
                          .IsWithin(0.000001, 2457215.833333));
            Assert.IsTrue(CalendricalHelper
                          .JulianDay(/* year */ 1992, /* month */ 10, /* day */ 13, /* hours */ 0.0)
                          .IsWithin(0.000001, 2448908.5));
        }
예제 #3
0
        public void SolarCoordinates()
        {
            // values from Astronomical Algorithms page 165

            double           jd    = CalendricalHelper.JulianDay(/* year */ 1992, /* month */ 10, /* day */ 13);
            SolarCoordinates solar = new SolarCoordinates(/* JulianDay */ jd);

            double T    = CalendricalHelper.JulianCentury(/* JulianDay */ jd);
            double L0   = Astronomical.MeanSolarLongitude(/* julianCentury */ T);
            double ε0   = Astronomical.MeanObliquityOfTheEcliptic(/* julianCentury */ T);
            double εapp = Astronomical.ApparentObliquityOfTheEcliptic(
                /* julianCentury */ T, /* meanObliquityOfTheEcliptic */ ε0);
            double M = Astronomical.MeanSolarAnomaly(/* julianCentury */ T);
            double C = Astronomical.SolarEquationOfTheCenter(
                /* julianCentury */ T, /* meanAnomaly */ M);
            double λ = Astronomical.ApparentSolarLongitude(
                /* julianCentury */ T, /* meanLongitude */ L0);
            double δ = solar.Declination;
            double α = DoubleUtil.UnwindAngle(solar.RightAscension);

            Assert.IsTrue(T.IsWithin(0.00000000001, (-0.072183436)));
            Assert.IsTrue(L0.IsWithin(0.00001, (201.80720)));
            Assert.IsTrue(ε0.IsWithin(0.00001, (23.44023)));
            Assert.IsTrue(εapp.IsWithin(0.00001, (23.43999)));
            Assert.IsTrue(M.IsWithin(0.00001, (278.99397)));
            Assert.IsTrue(C.IsWithin(0.00001, (-1.89732)));

            // lower accuracy than desired
            Assert.IsTrue(λ.IsWithin(0.00002, (199.90895)));
            Assert.IsTrue(δ.IsWithin(0.00001, (-7.78507)));
            Assert.IsTrue(α.IsWithin(0.00001, (198.38083)));

            // values from Astronomical Algorithms page 88

            jd    = CalendricalHelper.JulianDay(/* year */ 1987, /* month */ 4, /* day */ 10);
            solar = new SolarCoordinates(/* JulianDay */ jd);
            T     = CalendricalHelper.JulianCentury(/* JulianDay */ jd);

            double θ0   = Astronomical.MeanSiderealTime(/* julianCentury */ T);
            double θapp = solar.ApparentSiderealTime;
            double Ω    = Astronomical.AscendingLunarNodeLongitude(/* julianCentury */ T);

            ε0 = Astronomical.MeanObliquityOfTheEcliptic(/* julianCentury */ T);
            L0 = Astronomical.MeanSolarLongitude(/* julianCentury */ T);
            double Lp = Astronomical.MeanLunarLongitude(/* julianCentury */ T);
            double ΔΨ = Astronomical.NutationInLongitude(/* julianCentury */ T,
                                                         /* solarLongitude */ L0, /* lunarLongitude */ Lp, /* ascendingNode */ Ω);
            double Δε = Astronomical.NutationInObliquity(/* julianCentury */ T,
                                                         /* solarLongitude */ L0, /* lunarLongitude */ Lp, /* ascendingNode */ Ω);
            double ε = ε0 + Δε;

            Assert.IsTrue(θ0.IsWithin(0.000001, (197.693195)));
            Assert.IsTrue(θapp.IsWithin(0.0001, (197.6922295833)));

            // values from Astronomical Algorithms page 148

            Assert.IsTrue(Ω.IsWithin(0.0001, (11.2531)));
            Assert.IsTrue(ΔΨ.IsWithin(0.0001, (-0.0010522)));
            Assert.IsTrue(Δε.IsWithin(0.00001, (0.0026230556)));
            Assert.IsTrue(ε0.IsWithin(0.000001, (23.4409463889)));
            Assert.IsTrue(ε.IsWithin(0.00001, (23.4435694444)));
        }