mountcontrol/mcc/tests/ccte_test.cpp
2025-08-19 11:52:54 +03:00

82 lines
3.0 KiB
C++

#include <iostream>
#include "../mcc_ccte_erfa.h"
#include "../mcc_pzone.h"
using namespace mcc::ccte::erfa;
int main()
{
MccCCTE_ERFA::engine_state_t state{.lat = 43.646711_degs, .lon = 41.440732_degs, .elev = 2100.0};
state.meteo = {10.0, 0.5, 1010.0};
MccCCTE_ERFA erfa(state);
std::cout << "LAT = " << mcc::MccAngle(state.lat).sexagesimal() << "\n";
std::cout << "LON = " << mcc::MccAngle(state.lon).sexagesimal() << "\n";
auto now = std::chrono::system_clock::now();
mcc::MccCelestialPoint cp{
.pair_kind = mcc::MccCoordPairKind::COORDS_KIND_RADEC_ICRS, .X = "10:20:30.44"_hms, .Y = "20:30:40.55"_dms};
mcc::MccEqtHrzCoords eqhrz;
eqhrz.time_point = now;
auto ret = erfa.transformCoordinates(cp, &eqhrz);
std::cout << "ret = " << ret.message() << "\n";
std::cout << "RA_ICRS = " << mcc::MccAngle(cp.X).sexagesimal(true) << "\n";
std::cout << "DEC_ICRS = " << mcc::MccAngle(cp.Y).sexagesimal() << "\n\n";
std::cout << "time point = " << eqhrz.time_point << "\n";
std::cout << "RA_APP = " << mcc::MccAngle(eqhrz.RA_APP).sexagesimal(true) << "\n";
std::cout << "DEC_APP = " << mcc::MccAngle(eqhrz.DEC_APP).sexagesimal() << "\n";
std::cout << "HA = " << mcc::MccAngle(eqhrz.HA).sexagesimal(true) << "\n";
std::cout << "AZ = " << mcc::MccAngle(eqhrz.AZ).sexagesimal() << "\n";
std::cout << "ZD = " << mcc::MccAngle(eqhrz.ZD).sexagesimal() << "\n";
std::cout << "ALT = " << mcc::MccAngle(eqhrz.ALT).sexagesimal() << "\n";
std::cout << "\n\n";
mcc::MccJulianDay jd;
ret = erfa.timepointToJulday(now, &jd);
std::cout << "ret = " << ret.message() << "\n";
std::cout << "JD = " << std::setprecision(12) << (double)jd << "\n";
mcc::MccAngle lst, eo;
ret = erfa.timepointToAppSideral(now, &lst, true);
std::cout << "LST = " << lst.sexagesimal(true) << "\n";
ret = erfa.equationOrigins(now, &eo);
std::cout << "EO = " << eo.sexagesimal(true) << "\n";
std::cout << "\n\n";
mcc::MccAltLimitPZ<mcc::MccAltLimitKind::MIN_ALT_LIMIT> altmin(10.0_degs, state.lat, &erfa);
bool inzone;
std::cout << "time point = " << eqhrz.time_point << "\n";
ret = altmin.inPZone(eqhrz, &inzone);
std::cout << "ret = " << ret.message() << "\n";
std::cout << "ALTMIN: inZone = " << std::boolalpha << inzone << "\n";
std::chrono::duration<double> dsec;
ret = altmin.timeToPZone(eqhrz, &dsec);
std::cout << "ret = " << ret.message() << "\n";
std::cout << "TIME TO ZONE: " << dsec << " ("
<< now + std::chrono::duration_cast<std::chrono::system_clock::duration>(dsec) << ")\n";
mcc::MccCelestialPoint icp{.pair_kind = mcc::MccCoordPairKind::COORDS_KIND_AZALT, .time_point = now};
ret = altmin.intersectPZone(eqhrz, &icp);
std::cout << "ret = " << ret.message() << "\n";
std::cout << "INTERSEC AZ = " << mcc::MccAngle(icp.X).sexagesimal() << "\n";
std::cout << "INTERSEC ALT = " << mcc::MccAngle(icp.Y).sexagesimal() << "\n";
return 0;
}