This commit is contained in:
Timur A. Fatkhullin
2026-01-30 22:20:42 +03:00
parent 9aea122b08
commit a686731c0a
111 changed files with 27707 additions and 50 deletions

86
tests/mcc_coord_test.cpp Normal file
View File

@@ -0,0 +1,86 @@
#include <iostream>
// #include <mcc_ccte_erfa.h>
#include <mcc_coordinate.h>
using namespace mcc::impl;
typedef MccGenericSkyPoint<mcc::ccte::erfa::MccCCTE_ERFA> skypt_t;
static skypt_t::ccte_t::engine_state_t saoras{.meteo{.temperature = 0.0, .humidity = 0.5, .pressure = 1010.0},
.wavelength = 0.5,
.lat = 43.646711_degs,
.lon = 41.440732_degs,
.elev = 2100.0};
// skypt_t::cctEngine.setStateERFA(saoras);
static_assert(mcc::mcc_angle_c<double>, "!!!!!!!!!!!!");
int main()
{
skypt_t::cctEngine.setStateERFA(saoras);
skypt_t pt;
MccSkyRADEC_ICRS icrs(0.0, 70.0_degs);
pt = icrs;
MccSkyRADEC_OBS radec_obs{0.0, 0.0};
MccSkyRADEC_APP radec_app;
MccSkyAZALT azalt{0, 0};
MccSkyAZZD azzd{0, 0};
MccSkyHADEC_OBS hadec_obs;
MccAngle eo, lst;
skypt_t::cctEngine.equationOrigins(radec_obs.epoch(), &eo);
skypt_t::cctEngine.apparentSideralTime(radec_obs.epoch(), &lst, true);
std::cout << "EO = " << eo.sexagesimal(true) << "\n";
std::cout << "LST = " << lst.sexagesimal(true) << "\n\n";
pt.to(radec_obs, azalt, azzd, radec_app);
std::cout << "FROM ICRS TO OBSERVED:\n";
std::cout << "RA_ICRS = " << icrs.x().sexagesimal(true) << "\n";
std::cout << "DEC_ICRS = " << icrs.y().sexagesimal() << "\n";
std::cout << "OBS COORD EPOCH: " << radec_obs.epoch().UTC() << "\n";
std::cout << "RA_OBS = " << radec_obs.x().sexagesimal(true) << "\n";
std::cout << "DEC_OBS = " << radec_obs.y().sexagesimal() << "\n";
std::cout << "AZ = " << azalt.x().sexagesimal() << "\n";
std::cout << "ALT = " << azalt.y().sexagesimal() << "\n";
std::cout << "ZD = " << azzd.y().sexagesimal() << "\n";
std::cout << "RA_APP = " << radec_app.x().sexagesimal(true) << "\n";
std::cout << "DEC_APP = " << radec_app.y().sexagesimal() << "\n";
// radec_obs = {10.2387983_degs, "43:21:34.5465"_dms};
icrs.setX(111.0_degs), icrs.setY(111.0_degs);
azzd.setX(111.0_degs), azzd.setY(111.0_degs);
azalt.setX(111.0_degs), azalt.setY(111.0_degs);
hadec_obs.setX(111.0_degs), hadec_obs.setY(111.0_degs);
pt = radec_obs;
pt.to(icrs, azzd, hadec_obs);
std::cout << "\n\nFROM OBSERVED TO ICRS:\n";
std::cout << "OBS COORD EPOCH: " << radec_obs.epoch().UTC() << "\n";
std::cout << "RA_OBS = " << radec_obs.x().sexagesimal(true) << "\n";
std::cout << "DEC_OBS = " << radec_obs.y().sexagesimal() << "\n";
std::cout << "RA_ICRS = " << icrs.x().sexagesimal(true) << "\n";
std::cout << "DEC_ICRS = " << icrs.y().sexagesimal() << "\n";
std::cout << "\n\nFROM OBSERVED TO OBSERVED:\n";
std::cout << "OBS COORD EPOCH: " << radec_obs.epoch().UTC() << "\n";
std::cout << "RA_OBS = " << radec_obs.x().sexagesimal(true) << "\n";
std::cout << "DEC_OBS = " << radec_obs.y().sexagesimal() << "\n";
std::cout << "HA_OBS = " << hadec_obs.x().sexagesimal(true) << "\n";
std::cout << "AZ = " << azzd.x().sexagesimal() << "\n";
std::cout << "ZD = " << azzd.y().sexagesimal() << "\n";
azalt = pt;
std::cout << "ALT = " << azalt.y().sexagesimal() << "\n";
return 0;
}

70
tests/mcc_pzone_test.cpp Normal file
View File

@@ -0,0 +1,70 @@
#include <iostream>
#include <mcc_coordinate.h>
#include <mcc_pzone.h>
#include <mcc_pzone_container.h>
using namespace mcc::impl;
typedef MccAltLimitPZ<MccAltLimitKind::MIN_ALT_LIMIT> pz_minalt_t;
typedef MccAltLimitPZ<MccAltLimitKind::MAX_ALT_LIMIT> pz_maxalt_t;
static MccSkyPoint::ccte_t::engine_state_t saoras{.meteo{.temperature = 0.0, .humidity = 0.5, .pressure = 1010.0},
.wavelength = 0.5,
.lat = 43.646711_degs,
.lon = 41.440732_degs,
.elev = 2100.0};
int main()
{
MccSkyPoint::cctEngine.setStateERFA(saoras);
pz_minalt_t MinAltPZ(10.0_degs, 43.646711_degs);
pz_maxalt_t MaxAltPZ(85.0_degs, 43.646711_degs);
MccPZoneContainer cont;
cont.addPZone(MinAltPZ);
auto sz = cont.addPZone(MaxAltPZ);
std::cout << sz << " pzones were added\n";
MccSkyPoint sp;
MccAngleAZ az = 125.1_degs;
MccAngleZD zd = 4.2_degs;
sp.from(MccSkyAZZD{az, zd});
std::vector<bool> inzone;
bool flag;
std::cout << "Sky point AZ-ZD: [" << az.degrees() << ", " << zd.degrees() << "]\n";
auto err = cont.inPZone(sp, &flag, &inzone);
if (!err) {
std::cout << "Check 'in zone' flag: common flag = " << std::boolalpha << flag << " :\n";
for (int i = 0; i < sz; ++i) {
std::cout << "\t" << i + 1 << "-th pzone: " << std::boolalpha << inzone[i] << "\n";
}
} else {
std::cout << "ERR: " << err.message() << "\n";
}
std::cout << "\n\n";
// inzone.clear();
zd = 82.4356_degs;
sp.from(MccSkyAZZD{az, zd});
std::cout << "Sky point AZ-ZD: [" << az.degrees() << ", " << zd.degrees() << "]\n";
err = cont.inPZone(sp, &flag, &inzone);
if (!err) {
std::cout << "Check 'in zone' flag: common flag = " << std::boolalpha << flag << " :\n";
for (int i = 0; i < sz; ++i) {
std::cout << "\t" << i + 1 << "-th pzone: " << std::boolalpha << inzone[i] << "\n";
}
} else {
std::cout << "ERR: " << err.message() << "\n";
}
return 0;
}

View File

@@ -0,0 +1,90 @@
#include <iostream>
#include <random>
#include <mcc_pcm.h>
#include <mcc_telemetry.h>
static std::random_device rd;
static std::mt19937 gen(rd());
static std::uniform_int_distribution<long> tm_distrib(100, 700);
static std::uniform_real_distribution<double> x_distrib(1000, 7000);
static std::uniform_real_distribution<double> y_distrib(1000, 7000);
static std::uniform_real_distribution<double> xs_distrib(100, 700);
static std::uniform_real_distribution<double> ys_distrib(100, 700);
struct hw_t {
static constexpr std::string_view hardwareName{"HW-TEST"};
typedef int error_t;
enum class hardware_movement_state_t : int {
HW_MOVE_ERROR = -1,
HW_MOVE_STOPPED = 0,
HW_MOVE_STOPPING,
HW_MOVE_SLEWING,
HW_MOVE_ADJUSTING,
HW_MOVE_TRACKING,
HW_MOVE_GUIDING
};
struct hardware_state_t {
mcc::impl::MccGenXY XY{1.0, 1.0}, speedXY{2.0, 2.0};
hardware_movement_state_t movementState{hardware_movement_state_t::HW_MOVE_STOPPED};
};
error_t hardwareSetState(hardware_state_t const&)
{
return 0;
}
error_t hardwareGetState(hardware_state_t* state)
{
auto ms = std::chrono::milliseconds(tm_distrib(gen));
std::cout << "\tgetState running " << ms << " ...";
std::this_thread::sleep_for(ms);
std::cout << "\tdone!\n";
*state = hardware_state_t{.XY{x_distrib(gen), y_distrib(gen)}, .speedXY{xs_distrib(gen), ys_distrib(gen)}};
return 0;
}
error_t hardwareInit()
{
return 0;
}
};
static_assert(mcc::mcc_hardware_c<hw_t>, "!!!!!");
typedef mcc::impl::MccTelemetry<hw_t> t_t;
int main()
{
hw_t hw;
mcc::impl::MccMountDefaultForkPec pcm;
t_t tlm(&hw, &pcm);
typename t_t::telemetry_data_t tdata;
for (int i = 0; i < 20; ++i) {
std::cout << std::format("{}-th run\n", i + 1);
auto err = tlm.telemetryData(&tdata);
std::cout << "\tgot hw: XY = {" << tdata.hwState.XY.x() << ", " << tdata.hwState.XY.y() << "}; speedXY = {"
<< tdata.hwState.speedXY.x() << ", " << tdata.hwState.speedXY.y() << "}\n";
if (err) {
std::cout << "ERR: " << err.message() << "\n";
}
}
return 0;
}