#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 class MccAltLimitPZ : public mcc_pzone_interface_t { 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 error_t inPZone(InputT coords, bool* result) requires(mcc_eqt_hrz_coord_c || mcc_celestial_point_c) { // auto ret = // return ret; } template error_t timeToPZone(InputT coords, traits::mcc_time_duration_c auto* res_time) requires(mcc_eqt_hrz_coord_c || mcc_celestial_point_c) { } template error_t timeFromPZone(InputT coords, traits::mcc_time_duration_c auto* res_time) requires(mcc_eqt_hrz_coord_c || mcc_celestial_point_c) { } template error_t intersectPZone(InputT coords, mcc_celestial_point_c auto* point) requires(mcc_eqt_hrz_coord_c || mcc_celestial_point_c) { } }; } // namespace mcc