package org.josast.util.date;
import org.avmdti.josast.util.*;
/**
* Calculate Greenwich Mean Sidereal Time for the Julian date.
*
*
* date 7 août 2003
*
*
*
* Source Update
*
*
date : name : comments
* V1 : mercier : create file
*
*
*
* Explanatory Supplement to the Astronomical Almanac, page 50. // Orbital
* Coordinate Systems, Part III, Dr. T.S. Kelso, Satellite Times, // Nov/Dec
* 1995
*
*
*
* @author XTOPHE josast at
* avmdti.org
* @version 1.0
*/
/**
*
*
*
*/
public class SideralTime {
private static final double OMEGA_E = 1.00273790934; // earth rotation per
/**
*
* Calculate Greenwich Mean Sidereal Time for the Julian date. The return
* value is the angle, in radians, measuring eastward from the Vernal
* Equinox to the prime meridian. This angle is also referred to as "ThetaG"
* (Theta GMST).
*
*
References: The 1992 Astronomical Almanac, page B6.
* Explanatory Supplement to the Astronomical Almanac, page 50. // Orbital
* Coordinate Systems, Part III, Dr. T.S. Kelso, Satellite Times, // Nov/Dec
* 1995
*
* @param m_Date
* julian date
* @return Greenwich Mean Sidereal Time (in radian)
*/
public static double CalculGMST(double m_Date) {
double UT = MathTools.fmod(m_Date + 0.5, 1.0);
double TU = (JulianDay.FromJan1_12h_2000(m_Date) - UT) / 36525.0;
double GMST = 24110.54841 + TU
* (8640184.812866 + TU * (0.093104 - TU * 6.2e-06));
GMST = MathTools.fmod(GMST + Day.SEC_PER_DAY * OMEGA_E * UT,
Day.SEC_PER_DAY);
if (GMST < 0.0)
GMST += Day.SEC_PER_DAY; // "wrap" negative modulo value
return (Math.PI * 2 * (GMST / Day.SEC_PER_DAY));
}
/**
* Calculate Local Mean Sidereal Time for given longitude (for this date).
* The longitude is assumed to be in radians measured west from Greenwich.
* The return value is the angle, in radians, measuring eastward from the
* Vernal Equinox to the given longitude.
*
* @param longitude (in radian)
* @param M_Date Julian date
* @return Local Mean Sidereal Time (in radian)
*/
public static double toLMST(double lon, double M_Date) {
return MathTools.fmod(CalculGMST(M_Date) + lon, Math.PI * 2);
}
}