79 lines
2.2 KiB
C++
79 lines
2.2 KiB
C++
#pragma once
|
|
|
|
/* MOUNT CONTROL COMPONENTS LIBRARY */
|
|
|
|
|
|
/* IMPLEMENTATION OF SOME SIMPLE PROHIBITED ZONES */
|
|
|
|
#include "mcc_generics.h"
|
|
|
|
namespace mcc
|
|
{
|
|
|
|
static constexpr double mcc_sideral_to_UT1_ratio = 1.002737909350795; // sideral/UT1
|
|
|
|
|
|
/* MINIMAL OR MAXIMAL ALTITUDE PROHIBITED ZONES */
|
|
|
|
enum class MccAltLimitKind { MIN_ALT_LIMIT, MAX_ALT_LIMIT };
|
|
|
|
template <mcc_ccte_c CCTE_T, MccAltLimitKind KIND = MccAltLimitKind::MIN_ALT_LIMIT>
|
|
class MccAltLimitPZ : public mcc_pzone_interface_t<std::error_code>
|
|
{
|
|
protected:
|
|
double _altLimit, _cosALim, _sinAlim;
|
|
double _cosLat, _sinLat, _absLat;
|
|
|
|
CCTE_T* _ccteEngine;
|
|
|
|
public:
|
|
typedef std::error_code error_t;
|
|
|
|
MccAltLimitPZ(mcc_angle_c auto const& alt_limit, mcc_angle_c auto const& latitude, CCTE_T* ccte_engine)
|
|
: _altLimit(alt_limit),
|
|
_cosALim(cos(_altLimit)),
|
|
_sinAlim(sin(_altLimit)),
|
|
_cosLat(cos(latitude)),
|
|
_sinLat(sin(latitude)),
|
|
_absLat(abs(latitude)),
|
|
_ccteEngine(ccte_engine)
|
|
{
|
|
}
|
|
|
|
consteval std::string_view name() const
|
|
{
|
|
return KIND == MccAltLimitKind::MIN_ALT_LIMIT ? "MINALT-ZONE"
|
|
: KIND == MccAltLimitKind::MAX_ALT_LIMIT ? "MAXALT-ZONE"
|
|
: "ALTLIMIT-UNKNOWN";
|
|
}
|
|
|
|
|
|
template <typename InputT>
|
|
error_t inPZone(InputT coords, bool* result)
|
|
requires(mcc_eqt_hrz_coord_c<InputT> || mcc_celestial_point_c<InputT>)
|
|
{
|
|
// auto ret =
|
|
// return ret;
|
|
}
|
|
|
|
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>)
|
|
{
|
|
}
|
|
|
|
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>)
|
|
{
|
|
}
|
|
|
|
template <typename InputT>
|
|
error_t intersectPZone(InputT coords, mcc_celestial_point_c auto* point)
|
|
requires(mcc_eqt_hrz_coord_c<InputT> || mcc_celestial_point_c<InputT>)
|
|
{
|
|
}
|
|
};
|
|
|
|
} // namespace mcc
|