Line data Source code
1 : /** 2 : * @file 3 : * @brief Conversions between radians and degrees. 4 : */ 5 : #pragma once 6 : 7 : #include <AH/STL/type_traits> 8 : #include <AH/Settings/NamespaceSettings.hpp> 9 : #include <AH/Settings/Warnings.hpp> 10 : AH_DIAGNOSTIC_WERROR() // Enable errors on warnings 11 : 12 : BEGIN_AH_NAMESPACE 13 : 14 : namespace detail { 15 : constexpr long double pi_inv_l = 0.318309886183790671537767526745028724L; 16 : constexpr long double pi_l = 3.141592653589793238462643383279502884L; 17 : } // namespace detail 18 : 19 : /// @addtogroup AH_Math 20 : /// @{ 21 : 22 : /// Convert radians to degrees. 23 : template <class T> 24 : constexpr inline 25 : typename std::enable_if<std::is_floating_point<T>::value, T>::type 26 4 : rad2deg(T r) { 27 4 : return r * static_cast<T>(detail::pi_inv_l) * 180; 28 : } 29 : /// Convert degrees to radians. 30 : template <class T> 31 : constexpr inline 32 : typename std::enable_if<std::is_floating_point<T>::value, T>::type 33 499718 : deg2rad(T d) { 34 499718 : return d * static_cast<T>(detail::pi_l) / 180; 35 : } 36 : 37 : /// Convert degrees to radians, e.g. 10_deg. 38 1 : constexpr long double operator"" _deg(long double deg) { return deg2rad(deg); } 39 : /// Convert degrees to radians, e.g. 10_deg. 40 499714 : constexpr long double operator"" _deg(unsigned long long deg) { 41 499714 : return deg2rad(static_cast<long double>(deg)); 42 : } 43 : 44 : /// @} 45 : 46 : END_AH_NAMESPACE 47 : 48 : AH_DIAGNOSTIC_POP()