40#include "rxdock/Quat.h"
42#include <nlohmann/json.hpp>
44using json = nlohmann::json;
53 Euler(
double heading = 0.0,
double attitude = 0.0,
double bank = 0.0)
54 : m_heading(heading), m_attitude(attitude), m_bank(bank) {}
63 bool isStandardised()
const {
64 return (m_heading >= -M_PI) && (m_heading <= M_PI) &&
65 (m_attitude >= -M_PI / 2.0) && (m_attitude <= M_PI / 2.0) &&
66 (m_bank >= -M_PI) && (m_bank <= M_PI);
70 if (!isStandardised())
75 double GetHeading()
const {
return m_heading; }
77 double GetAttitude()
const {
return m_attitude; }
79 double GetBank()
const {
return m_bank; }
83 RBTDLL_EXPORT
Quat ToQuat()
const;
87 RBTDLL_EXPORT
void FromQuat(
const Quat &q);
89 void Rotate(
const Quat &q) { FromQuat(q * ToQuat()); }
90 void Rotate(
const Vector &axis,
double theta) { Rotate(
Quat(axis, theta)); }
93 friend std::ostream &operator<<(std::ostream &s,
const Euler &euler) {
94 return s <<
"Heading = " << euler.m_heading
95 <<
", Attitude = " << euler.m_attitude
96 <<
", Bank = " << euler.m_bank;
99 friend void to_json(json &j,
const Euler &eul);
100 friend void from_json(
const json &j,
Euler &eul);
108void to_json(json &j,
const Euler &eul);
109void from_json(
const json &j,
Euler &eul);