This commit is contained in:
2025-12-22 17:13:04 +03:00
parent 2c7d563994
commit 54d6c25171
6 changed files with 80 additions and 18 deletions

View File

@@ -331,6 +331,10 @@ protected:
template <mcc_coord_pair_c PT>
auto toHelper(PT& cpair)
{
if (this == &cpair) {
return;
}
static constexpr double half_pi = std::numbers::pi / 2.0;
// HA, DEC to AZ, ALT (AZ from the South through the West)
@@ -387,34 +391,35 @@ protected:
static_assert(PT::pairKind == MccCoordPairKind::COORDS_KIND_GENERIC, "UNSUPPORTED SKY POINT TRANSFORMATION!");
static_assert(PT::pairKind == MccCoordPairKind::COORDS_KIND_UNKNOWN, "UNSUPPORTED SKY POINT TRANSFORMATION!");
// from ICRS to ICRS - just copy and exit
if (_pairKind == MccCoordPairKind::COORDS_KIND_RADEC_ICRS &&
PT::pairKind == MccCoordPairKind::COORDS_KIND_RADEC_ICRS) {
cpair = PT(PT::x_t(_x), PT::y_t(_y), _epoch);
return;
}
// just copy coordinates and exit
if (_pairKind == PT::pairKind && utils::isEqual(_epoch.MJD(), cpair.MJD())) {
cpair = PT(PT::x_t(_x), PT::y_t(_y), _epoch);
return;
}
// if epochs is not the same then
// 1) convert stored coordinates to ICRS ones
// 2) convert from the computed ICRS coordinates to required ones
MccCoordPairKind pkind = _pairKind;
if (!utils::isEqual(_epoch.MJD(), cpair.MJD())) { // convert stored pair to ICRS one (ra_icrs, dec_icrs)
if (_pairKind != MccCoordPairKind::COORDS_KIND_RADEC_ICRS) {
pkind = MccCoordPairKind::COORDS_KIND_RADEC_ICRS;
// convert here!!!
if (_pairKind == MccCoordPairKind::COORDS_KIND_RADEC_APP) {
// cct_engine.appToICRS(app_type, app_x, app_y, ra_icrs, dec_icrs)
// cct_engine.obsToICRS(obs_type, obs_x, obs_y, ra_icrs, dec_icrs)
if (mcc_is_obs_coordpair(_pairKind)) {
// cct_engine.obsToICRS(...)
} else if (mcc_is_app_coordpair(_pairKind)) {
// cct_engine.appToICRS(...)
} else if (_pairKind == MccCoordPairKind::COORDS_KIND_RADEC_OBS) {
// cct_engine.obsToICRS(...)
} else if (_pairKind == MccCoordPairKind::COORDS_KIND_HADEC_APP) {
// cct_engine.appToICRS(...)
} else if (_pairKind == MccCoordPairKind::COORDS_KIND_HADEC_OBS) {
// cct_engine.obsToICRS(...)
} else if (_pairKind == MccCoordPairKind::COORDS_KIND_AZZD) {
// cct_engine.obsToICRS(...)
} else if (_pairKind == MccCoordPairKind::COORDS_KIND_AZALT) {
// cct_engine.obsToICRS(...)
} else { // unsupported transformation!!!
return;
}
@@ -424,14 +429,18 @@ protected:
}
}
// here, from APP or OBS to ICRS
// here, from APP or OBS to ICRS and exit
if (pkind == MccCoordPairKind::COORDS_KIND_RADEC_ICRS &&
PT::pairKind == MccCoordPairKind::COORDS_KIND_RADEC_ICRS) {
cpair = PT(PT::x_t(ra_icrs), PT::y_t(dec_icrs), MccCelestialCoordEpoch{});
return;
}
// here, the input coordinates and stored one are at the same epoch
if (pkind == MccCoordPairKind::COORDS_KIND_RADEC_ICRS) {
// cct_engine.icrsToObs(ra_icrs, dec_icrs, jd, ra_obs, dec_obs, ha, az, zd)
// cct_engine.icrsToApp(ra_icrs, dec_icrs, jd, ra_app, dec_app, ha)
if constexpr (mccIsObsCoordPairKind<PT::pairKind>) {
// cct_engine.icrsToObs(...)
} else if constexpr (mccIsAppCoordPairKind<PT::pairKind>) {
@@ -538,6 +547,38 @@ protected:
} else { // unsupported transformation!!!
return;
}
if (pkind == MccCoordPairKind::COORDS_KIND_RADEC_APP || pkind == MccCoordPairKind::COORDS_KIND_RADEC_OBS) {
ra = _x;
dec = _y;
} else if (pkind == MccCoordPairKind::COORDS_KIND_HADEC_APP ||
pkind == MccCoordPairKind::COORDS_KIND_HADEC_OBS) {
ha = _x;
dec = _y;
} else if (pkind == MccCoordPairKind::COORDS_KIND_AZZD) {
az = _x;
zd = _y;
} else if (pkind == MccCoordPairKind::COORDS_KIND_AZALT) {
az = _x;
alt = _y;
} else { // unsupported transformation!!!
return;
}
auto comp_func = [&, this](this auto& self, MccCoordPairKind cp_kind) {
if (cp_kind == MccCoordPairKind::COORDS_KIND_AZALT) {
if constexpr (PT::pairKind == MccCoordPairKind::COORDS_KIND_RADEC_APP) {
} else if constexpr (PT::pairKind == MccCoordPairKind::COORDS_KIND_RADEC_OBS) {
} else if constexpr (PT::pairKind == MccCoordPairKind::COORDS_KIND_HADEC_APP) {
} else if constexpr (PT::pairKind == MccCoordPairKind::COORDS_KIND_HADEC_OBS) {
} else if constexpr (PT::pairKind == MccCoordPairKind::COORDS_KIND_AZALT) {
} else { // unsupported transformation!!!
return;
}
} else if (cp_kind == MccCoordPairKind::COORDS_KIND_AZZD) {
alt = half_pi - _y;
}
};
}
};