174 lines
6.0 KiB
C++
174 lines
6.0 KiB
C++
#include <iostream>
|
|
#include <list>
|
|
|
|
#include "../mcc_ccte_erfa.h"
|
|
#include "../mcc_netserver_proto.h"
|
|
#include "../mcc_pzone.h"
|
|
#include "../mcc_pzone_container.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";
|
|
|
|
|
|
mcc::MccAltLimitPZ<mcc::MccAltLimitKind::MAX_ALT_LIMIT> altmax(80.0_degs, state.lat, &erfa);
|
|
|
|
mcc::MccPZoneContainer<std::chrono::duration<double>> pzcont;
|
|
|
|
pzcont.addPZone(altmin);
|
|
pzcont.addPZone(altmax);
|
|
|
|
// std::vector<std::chrono::duration<double, std::ratio<60>>> vm;
|
|
std::vector<std::chrono::minutes> vm;
|
|
std::list<bool> lb;
|
|
bool cf;
|
|
ret = pzcont.inPZone(eqhrz, &cf, &lb);
|
|
std::cout << "ret = " << ret.message() << "\n";
|
|
std::cout << std::boolalpha;
|
|
std::cout << "IN ZONE 1: " << lb.front() << "\n";
|
|
std::cout << "IN ZONE 2: " << lb.back() << "\n";
|
|
std::cout << "COMMON IN ZONE 1,2: " << cf << "\n";
|
|
|
|
|
|
ret = pzcont.timeToPZone(eqhrz, &vm);
|
|
std::cout << "ret = " << ret.message() << "\n";
|
|
std::cout << "TIME TO ZONE 1: " << vm[0] << "\n";
|
|
std::cout << "TIME TO ZONE 2: " << vm[1] << "\n";
|
|
|
|
|
|
std::vector<mcc::MccCelestialPoint> vpt(
|
|
2, {.pair_kind = mcc::MccCoordPairKind::COORDS_KIND_AZZD, .time_point = eqhrz.time_point});
|
|
|
|
ret = pzcont.intersectPZone(eqhrz, &vpt);
|
|
std::cout << "ret = " << ret.message() << "\n";
|
|
if (!ret) {
|
|
std::cout << "INTERSC POINT 1: AZ = " << mcc::MccAngle(vpt[0].X).sexagesimal()
|
|
<< ", ZD = " << mcc::MccAngle(vpt[0].Y).sexagesimal() << "\n";
|
|
std::cout << "INTERSC POINT 2: AZ = " << mcc::MccAngle(vpt[1].X).sexagesimal()
|
|
<< ", ZD = " << mcc::MccAngle(vpt[1].Y).sexagesimal() << "\n";
|
|
}
|
|
|
|
|
|
std::cout << "\n\n";
|
|
|
|
MccCCTE_ERFA::meteo_t meteo{.temperature = 10.0, .humidity = 0.7, .pressure = 1010.0};
|
|
erfa.updateMeteoERFA(meteo);
|
|
|
|
MccCCTE_ERFA::refract_model_t rm;
|
|
|
|
erfa.refractionModel(&rm);
|
|
std::cout << "REFMODEL: A = " << rm.refa << ", B = " << rm.refb << "\n";
|
|
|
|
cp.pair_kind = mcc::MccCoordPairKind::COORDS_KIND_AZZD;
|
|
cp.X = 100.0_degs;
|
|
cp.Y = 45.0_degs;
|
|
|
|
double dZ;
|
|
erfa.refractionCorrection(cp, &dZ);
|
|
std::cout << "dZ(" << mcc::MccAngle(cp.Y).degrees() << ") = " << mcc::MccAngle(dZ).arcsecs() << "\n";
|
|
|
|
cp.Y = 50.0_degs;
|
|
erfa.refractionCorrection(cp, &dZ);
|
|
std::cout << "dZ(" << mcc::MccAngle(cp.Y).degrees() << ") = " << mcc::MccAngle(dZ).arcsecs() << "\n";
|
|
|
|
|
|
std::cout << "\n\n";
|
|
|
|
// std::string sc2{" 11:34:21.21 , 104.4567892"};
|
|
std::string sc2{" 11:34:21.21 , 1.044567892E02"};
|
|
|
|
auto p2 = mcc::utils::parseAnglePair(sc2);
|
|
|
|
std::cout << "ORIG STR: '" << sc2 << "'\n";
|
|
std::cout << p2.first << "; " << p2.second << "\n";
|
|
mcc::MccAngle a1{p2.first, mcc::MccDegreeTag{}};
|
|
mcc::MccAngle a2{p2.second, mcc::MccDegreeTag{}};
|
|
|
|
std::cout << a1.sexagesimal() << "\n" << a2.sexagesimal() << "\n";
|
|
|
|
|
|
std::cout << "\n\n";
|
|
|
|
std::string sm{"ACK TARGET 12:23:45.13 -09.23423525 RADEC"};
|
|
std::vector<std::string> sv;
|
|
|
|
auto mr = mcc::network::mcc_parse_netmsg(sm, sv);
|
|
|
|
std::cout << "MSG RET = <" << mr << ">\n";
|
|
for (auto const& pr : sv) {
|
|
std::cout << "\t[" << pr << "]\n";
|
|
}
|
|
|
|
return 0;
|
|
}
|