...
This commit is contained in:
@@ -80,7 +80,9 @@ public:
|
||||
typedef MccAngle coord_t;
|
||||
|
||||
typedef MccAngle sideral_time_t;
|
||||
// typedef juldate_t terr_time_t;
|
||||
typedef MccAngle pa_t;
|
||||
typedef MccAngle eo_t;
|
||||
|
||||
struct refract_result_t {
|
||||
double refa, refb;
|
||||
@@ -156,34 +158,67 @@ public:
|
||||
}
|
||||
|
||||
|
||||
engine_err_t apparentSiderTime(juldate_t juldate, sideral_time_t& gst, bool islocal = false)
|
||||
engine_err_t terrestialTime(juldate_t juldate, juldate_t& tt)
|
||||
{
|
||||
std::lock_guard lock{_stateMutex};
|
||||
|
||||
using real_days_t = std::chrono::duration<double, std::ratio<86400>>;
|
||||
|
||||
double ut1 = juldate.mjd, tt = juldate.mjd;
|
||||
|
||||
auto dut1 = _currentState._bulletinA.DUT1(juldate.mjd);
|
||||
|
||||
if (dut1.has_value()) {
|
||||
ut1 += std::chrono::duration_cast<real_days_t>(dut1.value()).count();
|
||||
} else { // out of range
|
||||
return ERROR_BULLETINA_OUT_OF_RANGE;
|
||||
}
|
||||
|
||||
auto tai_utc = _currentState._leapSeconds[juldate.mjd];
|
||||
if (tai_utc.has_value()) {
|
||||
tt += std::chrono::duration_cast<real_days_t>(tai_utc.value()).count();
|
||||
tt.mjd += std::chrono::duration_cast<real_days_t>(tai_utc.value()).count();
|
||||
} else {
|
||||
return ERROR_LEAPSECONDS_OUT_OF_RANGE;
|
||||
}
|
||||
|
||||
|
||||
auto tt_tai = _currentState._bulletinA.TT_TAI();
|
||||
tt += std::chrono::duration_cast<real_days_t>(tt_tai).count();
|
||||
tt.mjd = juldate.mjd + std::chrono::duration_cast<real_days_t>(tt_tai).count();
|
||||
|
||||
gst = eraGst06a(juldate.MJD0, ut1, juldate.MJD0, tt);
|
||||
return ERROR_OK;
|
||||
}
|
||||
|
||||
|
||||
engine_err_t apparentSiderTime(juldate_t juldate, sideral_time_t& gst, bool islocal = false)
|
||||
{
|
||||
// std::lock_guard lock{_stateMutex};
|
||||
|
||||
using real_days_t = std::chrono::duration<double, std::ratio<86400>>;
|
||||
|
||||
double ut1 = juldate.mjd;
|
||||
// double tt = juldate.mjd;
|
||||
|
||||
{
|
||||
std::lock_guard lock{_stateMutex};
|
||||
|
||||
auto dut1 = _currentState._bulletinA.DUT1(juldate.mjd);
|
||||
|
||||
if (dut1.has_value()) {
|
||||
ut1 += std::chrono::duration_cast<real_days_t>(dut1.value()).count();
|
||||
} else { // out of range
|
||||
return ERROR_BULLETINA_OUT_OF_RANGE;
|
||||
}
|
||||
}
|
||||
|
||||
// auto tai_utc = _currentState._leapSeconds[juldate.mjd];
|
||||
// if (tai_utc.has_value()) {
|
||||
// tt += std::chrono::duration_cast<real_days_t>(tai_utc.value()).count();
|
||||
// } else {
|
||||
// return ERROR_LEAPSECONDS_OUT_OF_RANGE;
|
||||
// }
|
||||
|
||||
|
||||
// auto tt_tai = _currentState._bulletinA.TT_TAI();
|
||||
// tt += std::chrono::duration_cast<real_days_t>(tt_tai).count();
|
||||
// gst = eraGst06a(juldate.MJD0, ut1, juldate.MJD0, tt);
|
||||
|
||||
juldate_t tt;
|
||||
auto err = terrestialTime(juldate, tt);
|
||||
if (err != ERROR_OK) {
|
||||
return err;
|
||||
}
|
||||
|
||||
gst = eraGst06a(juldate.MJD0, ut1, juldate.MJD0, tt.mjd);
|
||||
if (islocal) {
|
||||
gst += _currentState.lon;
|
||||
}
|
||||
@@ -192,6 +227,20 @@ public:
|
||||
}
|
||||
|
||||
|
||||
engine_err_t eqOrigins(juldate_t juldate, eo_t& eo)
|
||||
{
|
||||
juldate_t tt;
|
||||
|
||||
auto err = terrestialTime(juldate, tt);
|
||||
if (err != ERROR_OK) {
|
||||
return err;
|
||||
}
|
||||
|
||||
eo = eraEo06a(tt.MJD0, tt.mjd);
|
||||
|
||||
return ERROR_OK;
|
||||
}
|
||||
|
||||
/* atmospheric refraction-related methods */
|
||||
|
||||
engine_err_t refraction(refract_result_t& refr)
|
||||
@@ -205,6 +254,18 @@ public:
|
||||
}
|
||||
|
||||
|
||||
engine_err_t refractCorrection(const coord_t& alt, const refract_result_t& ref_params, coord_t& corr)
|
||||
{
|
||||
if (alt <= 0.0) {
|
||||
corr = 35.4 / 60.0 * std::numbers::pi / 180.0; // 35.4 arcminutes
|
||||
} else {
|
||||
auto tanALT = std::tan(alt);
|
||||
corr = ref_params.refa / tanALT + ref_params.refb / tanALT / tanALT / tanALT;
|
||||
}
|
||||
|
||||
return ERROR_OK;
|
||||
}
|
||||
|
||||
/* coordinates conversional methods */
|
||||
|
||||
engine_err_t icrs2obs(coord_t ra,
|
||||
|
||||
Reference in New Issue
Block a user