...
This commit is contained in:
parent
14e583a244
commit
273f239abb
@ -503,7 +503,8 @@ public:
|
||||
// first, compute HA from CIO-based RA!!!
|
||||
lst_eo();
|
||||
if (!ret) {
|
||||
ha = MccAngle(lst - from_pt.X + eo).normalize<MccAngle::NORM_KIND_0_360>();
|
||||
// ha = MccAngle(lst - from_pt.X + eo).normalize<MccAngle::NORM_KIND_0_360>();
|
||||
ha = MccAngle(lst - from_pt.X - eo).normalize<MccAngle::NORM_KIND_0_360>();
|
||||
} else {
|
||||
return ret;
|
||||
}
|
||||
@ -530,7 +531,8 @@ public:
|
||||
} else if (to_pt->pair_kind == MccCoordPairKind::COORDS_KIND_RADEC_APP) {
|
||||
lst_eo();
|
||||
if (!ret) {
|
||||
to_pt->X = MccAngle(lst - from_pt.X + eo).normalize<MccAngle::NORM_KIND_0_360>();
|
||||
// to_pt->X = MccAngle(lst - from_pt.X + eo).normalize<MccAngle::NORM_KIND_0_360>();
|
||||
to_pt->X = MccAngle(lst - from_pt.X - eo).normalize<MccAngle::NORM_KIND_0_360>();
|
||||
to_pt->Y = from_pt.Y;
|
||||
} else {
|
||||
return ret;
|
||||
@ -554,7 +556,8 @@ public:
|
||||
azalt2hadec(from_pt, to_pt);
|
||||
lst_eo();
|
||||
if (!ret) {
|
||||
to_pt->X = MccAngle(lst - to_pt->X + eo).normalize<MccAngle::NORM_KIND_0_360>();
|
||||
// to_pt->X = MccAngle(lst - to_pt->X + eo).normalize<MccAngle::NORM_KIND_0_360>();
|
||||
to_pt->X = MccAngle(lst - to_pt->X - eo).normalize<MccAngle::NORM_KIND_0_360>();
|
||||
}
|
||||
} else {
|
||||
ret = MccCCTE_ERFAErrorCode::ERROR_UNSUPPORTED_COORD_PAIR;
|
||||
|
||||
@ -1121,14 +1121,18 @@ public:
|
||||
static MccPointingTargetSerializer pt_ser;
|
||||
|
||||
// output format: <mount data>, speedX, speedY, pcmX, pcmY, refCorr (in arcsecs), <target data>
|
||||
// RA-APP_mnt, DEC-APP_mnt, HA_mnt, AZ_mnt, ZD_mnt, ALT_mnt, X_mnt, Y_mnt, COO-PAIR_mnt, TIME-POINT_mnt,
|
||||
// LST, SPEED_X_mnt, SPEED_Y_mnt, PCM_X, PCM_Y, REFCORR,
|
||||
// RA-ICRS_tag, DEC-ICRS_tag, RA-APP_tag, DEC-APP_tag, HA_tag, AZ_tag, ZD_tag, ALT_tag, X_tag, Y_tag,
|
||||
// COO-PAIR_tag, TIME-POINT_tag
|
||||
|
||||
eqhrz_ser.setFormat(_currentFormat);
|
||||
eqhrz_ser.setPrecision(_currentPrec);
|
||||
eqhrz_ser(value, bytes);
|
||||
|
||||
std::format_to(std::back_inserter(bytes), "{}", _delimiter);
|
||||
// toSexagesimalHour(bytes, value.LST);
|
||||
// std::format_to(std::back_inserter(bytes), "{}", _delimiter);
|
||||
toSexagesimalHour(bytes, value.LST);
|
||||
std::format_to(std::back_inserter(bytes), "{}", _delimiter);
|
||||
|
||||
// '*3600.0' to express refraction correction in arcseconds!
|
||||
toDegrees(bytes, value.speedX, value.speedY, value.pcmX, value.pcmY, value.refCorr * 3600.0);
|
||||
@ -1152,43 +1156,50 @@ public:
|
||||
// valid format: <mount data>, speedX, speedY, pcmX, pcmY, refCorr, <target data>
|
||||
|
||||
auto els = splitToElements(std::forward<IR>(bytes));
|
||||
if (els.size() < 12) {
|
||||
if (els.size() < 28) {
|
||||
// return std::make_error_code(std::errc::invalid_argument);
|
||||
return MccCoordinateConvErrorCode::ERROR_ARG_LEN;
|
||||
}
|
||||
|
||||
MccTelemetryData tdata;
|
||||
auto err = MccEqtHrzCoordsDeserializer{}(std::string_view{els[0].begin(), els[11].end()}, tdata);
|
||||
auto err = MccEqtHrzCoordsDeserializer{}(std::string_view{els[0].begin(), els[9].end()}, tdata);
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
|
||||
err = parseDegreeRepr(els[5], tdata.speedX);
|
||||
size_t idx = 10;
|
||||
|
||||
err = parseHourRepr(els[idx++], tdata.LST);
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
|
||||
err = parseDegreeRepr(els[5], tdata.speedY);
|
||||
err = parseDegreeRepr(els[idx++], tdata.speedX);
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
|
||||
err = parseDegreeRepr(els[5], tdata.pcmX);
|
||||
err = parseDegreeRepr(els[idx++], tdata.speedY);
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
|
||||
err = parseDegreeRepr(els[5], tdata.pcmY);
|
||||
err = parseDegreeRepr(els[idx++], tdata.pcmX);
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
|
||||
err = parseDegreeRepr(els[5], tdata.refCorr);
|
||||
err = parseDegreeRepr(els[idx++], tdata.pcmY);
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
|
||||
err = MccPointingTargetDeserializer{}(std::string_view{els[0].begin(), els[11].end()}, tdata.target);
|
||||
err = parseDegreeRepr(els[idx++], tdata.refCorr);
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
|
||||
err = MccPointingTargetDeserializer{}(std::string_view{els[idx].begin(), els.back().end()}, tdata.target);
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -9,6 +9,7 @@
|
||||
|
||||
#include <mutex>
|
||||
#include "bsplines/mcc_bsplines.h"
|
||||
#include "mcc_defaults.h"
|
||||
#include "mcc_generics.h"
|
||||
|
||||
namespace mcc
|
||||
@ -300,7 +301,19 @@ public:
|
||||
requires(mcc_celestial_point_c<T> || mcc_eqt_hrz_coord_c<T>)
|
||||
{
|
||||
// for small corrections only!!!
|
||||
auto ret = computePCM(std::move(app_pt), result, hw_pt);
|
||||
if constexpr (mcc_eqt_hrz_coord_c<T>) {
|
||||
if constexpr (mcc_is_equatorial_mount<MOUNT_TYPE>) {
|
||||
app_pt.X = app_pt.HA;
|
||||
app_pt.Y = app_pt.DEC_APP;
|
||||
} else if constexpr (mcc_is_altaz_mount<MOUNT_TYPE>) {
|
||||
app_pt.X = app_pt.AZ;
|
||||
app_pt.Y = app_pt.ZD;
|
||||
}
|
||||
}
|
||||
|
||||
MccCelestialPoint cp;
|
||||
auto ret = computePCM(app_pt, result, &cp);
|
||||
// auto ret = computePCM(std::move(app_pt), result, hw_pt);
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -111,6 +111,7 @@ public:
|
||||
MccTelemetry(CONTROLS_T* controls)
|
||||
: _isDataUpdated(new std::atomic_bool()),
|
||||
_data(),
|
||||
_userTarget(),
|
||||
_internalUpdating(new std::atomic_bool),
|
||||
_currentUpdateInterval(defaultUpdateInterval),
|
||||
_currentUpdateIntervalMutex(new std::mutex),
|
||||
@ -647,6 +648,9 @@ public:
|
||||
|
||||
std::lock_guard lock{*_updateMutex};
|
||||
|
||||
mcc_copy_celestial_point(pt, &_userTarget);
|
||||
|
||||
|
||||
_data.target.pair_kind = pt.pair_kind;
|
||||
if (pt.pair_kind == MccCoordPairKind::COORDS_KIND_AZALT) {
|
||||
_data.target.AZ = pt.X;
|
||||
@ -725,6 +729,8 @@ protected:
|
||||
std::unique_ptr<std::atomic_bool> _isDataUpdated;
|
||||
MccTelemetryData _data;
|
||||
|
||||
MccCelestialPoint _userTarget{};
|
||||
|
||||
std::unique_ptr<std::atomic_bool> _internalUpdating;
|
||||
std::chrono::nanoseconds _currentUpdateInterval{std::chrono::milliseconds(100)};
|
||||
std::unique_ptr<std::mutex> _currentUpdateIntervalMutex;
|
||||
|
||||
@ -20,7 +20,7 @@ int main()
|
||||
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};
|
||||
.pair_kind = mcc::MccCoordPairKind::COORDS_KIND_RADEC_ICRS, .X = "17:20:30.44"_hms, .Y = "20:30:40.55"_dms};
|
||||
|
||||
mcc::MccEqtHrzCoords eqhrz;
|
||||
eqhrz.time_point = now;
|
||||
@ -156,5 +156,50 @@ int main()
|
||||
std::cout << a1.sexagesimal() << "\n" << a2.sexagesimal() << "\n";
|
||||
|
||||
|
||||
std::cout << "\n\n";
|
||||
|
||||
std::memset(&eqhrz, 0, sizeof(eqhrz));
|
||||
|
||||
eqhrz.X = "12:13:10.08"_hms;
|
||||
eqhrz.Y = "0:07:39.5"_dms;
|
||||
|
||||
eqhrz.X = "00:00:0.0"_hms;
|
||||
eqhrz.Y = "00:00:00.0"_dms;
|
||||
// eqhrz.pair_kind = mcc::MccCoordPairKind::COORDS_KIND_RADEC_APP;
|
||||
// eqhrz.pair_kind = mcc::MccCoordPairKind::COORDS_KIND_RADEC_ICRS;
|
||||
eqhrz.pair_kind = mcc::MccCoordPairKind::COORDS_KIND_AZZD;
|
||||
|
||||
eqhrz.time_point = std::chrono::system_clock::now();
|
||||
erfa.transformCoordinates(eqhrz, &eqhrz);
|
||||
|
||||
// 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";
|
||||
// std::cout << "\n";
|
||||
|
||||
// state.meteo = {10.0, 0.5, 0.0}; // refraction must be 0!!!
|
||||
// erfa.setStateERFA(state);
|
||||
|
||||
// eqhrz.X = "00:00:0.0"_hms;
|
||||
// eqhrz.Y = "60:00:00.0"_dms;
|
||||
|
||||
|
||||
// // restore useful quantities
|
||||
// state.meteo = {10.0, 0.5, 1010.0};
|
||||
// erfa.setStateERFA(state);
|
||||
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user