#include #include #include "../mcc_ccte_erfa.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 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 dsec; ret = altmin.timeToPZone(eqhrz, &dsec); std::cout << "ret = " << ret.message() << "\n"; std::cout << "TIME TO ZONE: " << dsec << " (" << now + std::chrono::duration_cast(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 altmax(80.0_degs, state.lat, &erfa); mcc::MccPZoneContainer> pzcont; pzcont.addPZone(altmin); pzcont.addPZone(altmax); // std::vector>> vm; std::vector vm; std::list 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 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"; return 0; }