79 lines
1.8 KiB
C#
79 lines
1.8 KiB
C#
using System;
|
|
using ASCOM.Utilities;
|
|
|
|
namespace ASCOM.Meade.net.AstroMaths
|
|
{
|
|
public static class AstroMathExtensions
|
|
{
|
|
public static double DegreesToRadians(this double degrees)
|
|
{
|
|
return (Math.PI / 180) * degrees;
|
|
}
|
|
|
|
public static double RadiansToDegrees(this double radians)
|
|
{
|
|
double degrees = (180 / Math.PI) * radians;
|
|
return degrees;
|
|
}
|
|
|
|
public static double DateTimeToDecimalHours(this DateTime utcDateTime)
|
|
{
|
|
double sec = utcDateTime.Second;
|
|
double min = utcDateTime.Minute;
|
|
double hour = utcDateTime.Hour;
|
|
|
|
var a = Math.Abs(sec) / 60;
|
|
var b = (Math.Abs(min) + a) / 60;
|
|
var c = Math.Abs(hour) + b;
|
|
|
|
var d = c;
|
|
|
|
if ((hour < 0) || (min < 0) || (sec < 0))
|
|
d = -c;
|
|
|
|
return d;
|
|
}
|
|
|
|
public static double UTtoGst( this DateTime utcDateTime)
|
|
{
|
|
Util util = new Util();
|
|
|
|
var jd = util.DateUTCToJulian(utcDateTime) - 0.5;
|
|
if ((jd % 1) <= 0.5)
|
|
jd = Math.Floor(jd);
|
|
else
|
|
jd = Math.Floor(jd) + 0.5;
|
|
|
|
var s = jd - 2451545.0;
|
|
var t = s / 36525.0;
|
|
var t0 = 6.697374558 + (2400.051336 * t) + (0.000025862 * (t * t));
|
|
|
|
while (t0 < 0)
|
|
{
|
|
t0 += 24;
|
|
}
|
|
|
|
while (t0 >= 24)
|
|
{
|
|
t0 -= 24;
|
|
}
|
|
|
|
var ut = utcDateTime.DateTimeToDecimalHours();
|
|
var a = ut * 1.002737909;
|
|
|
|
var t1 = t0 + a;
|
|
|
|
while (t1 < 0)
|
|
{
|
|
t1 += 24;
|
|
}
|
|
|
|
while (t1 >= 24)
|
|
{
|
|
t1 -= 24;
|
|
}
|
|
|
|
return t1;
|
|
}
|
|
}
|
|
} |