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