...
This commit is contained in:
@@ -662,6 +662,7 @@ public:
|
||||
return MccAltLimitPZErrorCode::ERROR_OK;
|
||||
}
|
||||
|
||||
// time to reach maximal limit
|
||||
template <typename InputT>
|
||||
error_t timeToPZone(InputT coords, traits::mcc_time_duration_c auto* res_time)
|
||||
requires(mcc_eqt_hrz_coord_c<InputT> || mcc_celestial_point_c<InputT>)
|
||||
@@ -681,6 +682,18 @@ public:
|
||||
} else if constexpr (AXIS_KIND == MccCoordKind::COORDS_KIND_AZ) {
|
||||
}
|
||||
} else { // mcc_celestial_point_c
|
||||
if (coords.pair_kind == MccCoordPairKind::COORDS_KIND_XY) {
|
||||
time_ang = (_maxLimit - coords.X) / mcc_sideral_to_UT1_ratio; // to UT1 scale
|
||||
} else {
|
||||
MccCelestialPoint pt;
|
||||
|
||||
auto ret = getHWCoords(std::move(coords), &pt);
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
time_ang = (_maxLimit - pt.X) / mcc_sideral_to_UT1_ratio; // to UT1 scale
|
||||
}
|
||||
}
|
||||
|
||||
std::chrono::nanoseconds ns{
|
||||
@@ -688,19 +701,60 @@ public:
|
||||
|
||||
period_t rat;
|
||||
*res_time = res_t{static_cast<typename res_t::rep>(time_ang * 43200.0 / std::numbers::pi * rat.den / rat.num)};
|
||||
|
||||
return MccAltLimitPZErrorCode::ERROR_OK;
|
||||
}
|
||||
|
||||
// time to reach minimal limit
|
||||
template <typename InputT>
|
||||
error_t timeFromPZone(InputT coords, traits::mcc_time_duration_c auto* res_time)
|
||||
requires(mcc_eqt_hrz_coord_c<InputT> || mcc_celestial_point_c<InputT>)
|
||||
{
|
||||
using res_t = std::remove_cvref_t<decltype(*res_time)>;
|
||||
using period_t = typename res_t::period;
|
||||
|
||||
double time_ang;
|
||||
|
||||
if (res_time == nullptr) {
|
||||
return MccAltLimitPZErrorCode::ERROR_NULLPTR;
|
||||
}
|
||||
if constexpr (mcc_eqt_hrz_coord_c<InputT>) {
|
||||
// assume here .X and are hardware encoder coordinate of corresponding axis
|
||||
if constexpr (AXIS_KIND == MccCoordKind::COORDS_KIND_HA) {
|
||||
time_ang = (_minLimit - coords.X) / mcc_sideral_to_UT1_ratio; // to UT1 scale
|
||||
} else if constexpr (AXIS_KIND == MccCoordKind::COORDS_KIND_AZ) {
|
||||
}
|
||||
} else { // mcc_celestial_point_c
|
||||
if (coords.pair_kind == MccCoordPairKind::COORDS_KIND_XY) {
|
||||
time_ang = (_minLimit - coords.X) / mcc_sideral_to_UT1_ratio; // to UT1 scale
|
||||
} else {
|
||||
MccCelestialPoint pt;
|
||||
|
||||
auto ret = getHWCoords(std::move(coords), &pt);
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
time_ang = (_minLimit - pt.X) / mcc_sideral_to_UT1_ratio; // to UT1 scale
|
||||
}
|
||||
}
|
||||
|
||||
std::chrono::nanoseconds ns{
|
||||
static_cast<std::chrono::nanoseconds::rep>(time_ang * 43200.0 / std::numbers::pi * 1.0E9)};
|
||||
|
||||
period_t rat;
|
||||
*res_time = res_t{static_cast<typename res_t::rep>(time_ang * 43200.0 / std::numbers::pi * rat.den / rat.num)};
|
||||
|
||||
return MccAltLimitPZErrorCode::ERROR_OK;
|
||||
}
|
||||
|
||||
|
||||
template <typename InputT, typename ResultT>
|
||||
error_t intersectPZone(InputT coords, ResultT* point)
|
||||
requires((mcc_eqt_hrz_coord_c<InputT> || mcc_celestial_point_c<InputT>) &&
|
||||
(mcc_eqt_hrz_coord_c<ResultT> || mcc_celestial_point_c<ResultT>))
|
||||
{
|
||||
return MccAltLimitPZErrorCode::ERROR_OK;
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
Reference in New Issue
Block a user