#ifndef __SCOP_EULER_ANGLES__ #define __SCOP_EULER_ANGLES__ #include #include namespace Scop { template struct EulerAngles { constexpr EulerAngles() = default; constexpr EulerAngles(DegreeAngle P, DegreeAngle Y, DegreeAngle R); constexpr EulerAngles(const DegreeAngle angles[3]); template constexpr EulerAngles(const Angle& angle); constexpr EulerAngles(const Quat& quat); template constexpr explicit EulerAngles(const EulerAngles& angles); constexpr EulerAngles(const EulerAngles&) = default; constexpr EulerAngles(EulerAngles&&) = default; ~EulerAngles() = default; constexpr bool ApproxEqual(const EulerAngles& angles, T maxDifference = std::numeric_limits::epsilon()) const; constexpr EulerAngles& Normalize(); Quat ToQuat() const; std::string ToString() const; constexpr EulerAngles operator+(const EulerAngles& angles) const; constexpr EulerAngles operator-(const EulerAngles& angles) const; constexpr EulerAngles& operator=(const EulerAngles&) = default; constexpr EulerAngles& operator=(EulerAngles&&) = default; constexpr EulerAngles& operator+=(const EulerAngles& angles); constexpr EulerAngles& operator-=(const EulerAngles& angles); constexpr bool operator==(const EulerAngles& angles) const; constexpr bool operator!=(const EulerAngles& angles) const; constexpr bool operator<(const EulerAngles& angles) const; constexpr bool operator<=(const EulerAngles& angles) const; constexpr bool operator>(const EulerAngles& angles) const; constexpr bool operator>=(const EulerAngles& angles) const; static constexpr bool ApproxEqual(const EulerAngles& lhs, const EulerAngles& rhs, T maxDifference = std::numeric_limits::epsilon()); static constexpr EulerAngles Zero(); DegreeAngle pitch, yaw, roll; }; using EulerAnglesf = EulerAngles; } #include #endif