22 using FLOATING = FLOATING_TYPE;
28 constexpr angle_type() : m_fAngle(0.0) {}
30 constexpr angle_type(
with_t, FLOATING u):m_fAngle(u) {}
32 template < prototype_
floating FLOATING1 >
33 constexpr angle_type(const ::angle_type <FLOATING1 > & angle) : m_fAngle((FLOATING) angle.m_fAngle) {}
35 template < prototype_number Y, prototype_number X >
36 angle_type & atan(Y y, X x) { m_fAngle = ::std::atan2(y, x);
return *
this; }
38 angle_type operator -()
const {
return radians(-m_fAngle); }
40 operator FLOATING()
const {
return m_fAngle; }
42 FLOATING radian()
const {
return m_fAngle; }
44 FLOATING degree()
const {
return (FLOATING) m_fAngle * (FLOATING)180.0 / (FLOATING)MATH_PI; }
46 angle_type operator - (
const angle_type & angle)
const {
return radians(m_fAngle - angle.m_fAngle); }
47 angle_type operator + (
const angle_type & angle)
const {
return radians(m_fAngle + angle.m_fAngle); }
50 template < prototype_number NUMBER >
51 angle_type
operator-(NUMBER radians)
const { return ::radians(m_fAngle - (FLOATING)radians); }
54 template<prototype_number NUMBER>
55 angle_type
operator+(NUMBER radians)
const { return ::radians(m_fAngle + (FLOATING)radians); }
57 template < prototype_number NUMBER >
60 return radians(m_fAngle / (FLOATING) n);
63 FLOATING operator / (
const angle_type & angle)
const {
return m_fAngle / angle.m_fAngle; }
65 template<prototype_number NUMBER>
66 angle_type operator * (NUMBER n)
const
68 return ::radians(m_fAngle * (FLOATING) n);
71 angle_type &operator-=(
const angle_type &angle)
74 m_fAngle -= angle.m_fAngle;
80 angle_type &operator+=(
const angle_type &angle)
83 m_fAngle += angle.m_fAngle;
92 ::f64 normalized()
const {
auto d = (FLOATING) fmod(m_fAngle, 2.0 * MATH_PI);
return d < (FLOATING) 0.0 ? d + (FLOATING) (2.0 * MATH_PI) : d; }
93 void normalize() { m_fAngle = normalized(); }
96 static constexpr angle_type radians(FLOATING fAngle)
101 angle.m_fAngle = fAngle;
108 constexpr FLOATING radians()
const
116 constexpr FLOATING degrees()
const { return ::radians_to_degrees(m_fAngle); }
119 template < prototype_number NUMBER >
120 static constexpr angle_type degrees(NUMBER degrees)
123 return radians(degrees * MATH_PI / 180.0);
132 return ::std::cos(m_fAngle);
139 return ::std::sin(m_fAngle);