Exemple #1
0
        /// <summary>
        /// Calculates the value of DeltaT using SOFA
        /// Published DeltaT information: https://www.usno.navy.mil/USNO/earth-orientation/eo-products/long-term
        /// Formula: deltaT = 32.184 + (TAI - UTC) - (UT1 - UTC) https://de.wikipedia.org/wiki/Delta_T
        /// </summary>
        /// <param name="date">Date to retrieve DeltaT for</param>
        /// <returns>DeltaT at given date</returns>
        public static double DeltaT(DateTime date)
        {
            var    utcDate = date.ToUniversalTime();
            double utc1 = 0, utc2 = 0, tai1 = 0, tai2 = 0;

            SOFA.Dtf2d("UTC", utcDate.Year, utcDate.Month, utcDate.Day, utcDate.Hour, utcDate.Minute, (double)utcDate.Second + (double)utcDate.Millisecond / 1000.0, ref utc1, ref utc2);
            SOFA.UtcTai(utc1, utc2, ref tai1, ref tai2);

            var utc    = utc1 + utc2;
            var tai    = tai1 + tai2;
            var deltaT = 32.184 + DaysToSeconds((tai - utc)) - DeltaUT(utcDate);

            return(deltaT);
        }
        public Coordinates Transform(Epoch epoch)
        {
            var now   = DateTime.Now;
            var jdUTC = Astrometry.GetJulianDate(now);

            var zenithDistance = Astrometry.ToRadians(90d - Altitude.Degree);
            var deltaUT        = Astrometry.DeltaUT(now);

            var raRad  = 0d;
            var decRad = 0d;

            SOFA.TopocentricToCelestial("A", Azimuth.Radians, zenithDistance, jdUTC, 0d, deltaUT, Longitude.Radians, Latitude.Radians, 0d, 0d, 0d, 0d, 0d, 0d, 0d, ref raRad, ref decRad);
            var ra  = Angle.ByRadians(raRad);
            var dec = Angle.ByRadians(decRad);

            var coordinates = new Coordinates(ra, dec, Epoch.J2000);

            return(coordinates.Transform(epoch));
        }