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