From 68bd3304c6f2927beb7ba3d26faf4fddc918a1b4 Mon Sep 17 00:00:00 2001 From: Lynix Date: Sat, 6 Sep 2014 11:52:37 +0200 Subject: [PATCH] Renamed Degrees|Radians functions to From[Degrees|Radians] Also added To[Degrees|Radians] functions Former-commit-id: b7445a42e5ee88319009db9d664d8d9f8fe88c18 --- include/Nazara/Math/Algorithm.hpp | 6 ++-- include/Nazara/Math/Algorithm.inl | 48 +++++++++++++++++++++--------- include/Nazara/Math/Quaternion.inl | 10 +++---- include/Nazara/Math/Vector2.inl | 2 +- include/Nazara/Math/Vector3.inl | 2 +- 5 files changed, 45 insertions(+), 23 deletions(-) diff --git a/include/Nazara/Math/Algorithm.hpp b/include/Nazara/Math/Algorithm.hpp index 46d11645f..c4420f621 100644 --- a/include/Nazara/Math/Algorithm.hpp +++ b/include/Nazara/Math/Algorithm.hpp @@ -22,7 +22,8 @@ template T NzApproach(T value, T objective, T increment); template constexpr T NzClamp(T value, T min, T max); -template constexpr T NzDegrees(T degrees); +template constexpr T NzFromDegrees(T degrees); +template constexpr T NzFromRadians(T radians); template constexpr T NzDegreeToRadian(T degrees); unsigned int NzGetNearestPowerOfTwo(unsigned int number); unsigned int NzGetNumberLength(signed char number); @@ -40,9 +41,10 @@ template T NzMultiplyAdd(T x, T y, T z); template T NzNormalizeAngle(T angle); template bool NzNumberEquals(T a, T b, T maxDifference = std::numeric_limits::epsilon()); NzString NzNumberToString(long long number, nzUInt8 radix = 10); -template T NzRadians(T radians); template T NzRadianToDegree(T radians); long long NzStringToNumber(NzString str, nzUInt8 radix = 10, bool* ok = nullptr); +template constexpr T NzToDegrees(T angle); +template constexpr T NzToRadians(T angle); #include diff --git a/include/Nazara/Math/Algorithm.inl b/include/Nazara/Math/Algorithm.inl index 7f6884da8..49b54be32 100644 --- a/include/Nazara/Math/Algorithm.inl +++ b/include/Nazara/Math/Algorithm.inl @@ -31,7 +31,13 @@ constexpr T NzClamp(T value, T min, T max) } template -constexpr T NzDegrees(T degrees) +constexpr T NzDegreeToRadian(T degrees) +{ + return degrees * F(M_PI/180.0); +} + +template +constexpr T NzFromDegrees(T degrees) { #if NAZARA_MATH_ANGLE_RADIAN return NzDegreeToRadian(degrees); @@ -41,9 +47,13 @@ constexpr T NzDegrees(T degrees) } template -constexpr T NzDegreeToRadian(T degrees) +constexpr T NzFromRadians(T radians) { - return degrees * F(M_PI/180.0); + #if NAZARA_MATH_ANGLE_RADIAN + return radians; + #else + return NzRadianToDegree(radians); + #endif } inline unsigned int NzGetNearestPowerOfTwo(unsigned int number) @@ -51,7 +61,7 @@ inline unsigned int NzGetNearestPowerOfTwo(unsigned int number) ///TODO: Marquer comme constexpr en C++14 unsigned int x = 1; // Tant que x est plus petit que n, on décale ses bits vers la gauche, ce qui revient à multiplier par deux - while(x <= number) + while (x <= number) x <<= 1; return x; @@ -268,16 +278,6 @@ inline NzString NzNumberToString(long long number, nzUInt8 radix) return str.Reversed(); } -template -T NzRadians(T radians) -{ - #if NAZARA_MATH_ANGLE_RADIAN - return radians; - #else - return NzRadianToDegree(radians); - #endif -} - template T NzRadianToDegree(T radians) { @@ -333,6 +333,26 @@ inline long long NzStringToNumber(NzString str, nzUInt8 radix, bool* ok) return (negative) ? -static_cast(total) : total; } +template +constexpr T NzToDegrees(T angle) +{ + #if NAZARA_MATH_ANGLE_RADIAN + return NzRadianToDegree(angle); + #else + return angle; + #endif +} + +template +constexpr T NzToRadians(T angle) +{ + #if NAZARA_MATH_ANGLE_RADIAN + return angle; + #else + return NzDegreeToRadian(angle); + #endif +} + #undef F2 #undef F diff --git a/include/Nazara/Math/Quaternion.inl b/include/Nazara/Math/Quaternion.inl index 8348a5e2f..e62ed166f 100644 --- a/include/Nazara/Math/Quaternion.inl +++ b/include/Nazara/Math/Quaternion.inl @@ -265,14 +265,14 @@ NzEulerAngles NzQuaternion::ToEulerAngles() const T test = x*y + z*w; if (test > F(0.499)) // singularity at north pole - return NzEulerAngles(NzDegrees(F(90.0)), NzRadians(F(2.0) * std::atan2(x, w)), F(0.0)); + return NzEulerAngles(NzFromDegrees(F(90.0)), NzFromRadians(F(2.0) * std::atan2(x, w)), F(0.0)); if (test < F(-0.499)) - return NzEulerAngles(NzDegrees(F(-90.0)), NzRadians(F(-2.0) * std::atan2(x, w)), F(0.0)); + return NzEulerAngles(NzFromDegrees(F(-90.0)), NzFromRadians(F(-2.0) * std::atan2(x, w)), F(0.0)); - return NzEulerAngles(NzRadians(std::atan2(F(2.0)*x*w - F(2.0)*y*z, F(1.0) - F(2.0)*x* - F(2.0)*z*z)), - NzRadians(std::atan2(F(2.0)*y*w - F(2.0)*x*z, F(1.0) - F(2.0)*y*y - F(2.0)*z*z)), - NzRadians(std::asin(F(2.0)*test))); + return NzEulerAngles(NzFromRadians(std::atan2(F(2.0)*x*w - F(2.0)*y*z, F(1.0) - F(2.0)*x* - F(2.0)*z*z)), + NzFromRadians(std::atan2(F(2.0)*y*w - F(2.0)*x*z, F(1.0) - F(2.0)*y*y - F(2.0)*z*z)), + NzFromRadians(std::asin(F(2.0)*test))); } template diff --git a/include/Nazara/Math/Vector2.inl b/include/Nazara/Math/Vector2.inl index 227d95425..01d93a6fb 100644 --- a/include/Nazara/Math/Vector2.inl +++ b/include/Nazara/Math/Vector2.inl @@ -57,7 +57,7 @@ inline unsigned int NzVector2::AbsDotProduct(const NzVector2 T NzVector2::AngleBetween(const NzVector2& vec) const { - return NzRadians(std::atan2(vec.y, vec.x) - std::atan2(y, x)); + return NzFromRadians(std::atan2(vec.y, vec.x) - std::atan2(y, x)); } template diff --git a/include/Nazara/Math/Vector3.inl b/include/Nazara/Math/Vector3.inl index f300330b8..79b886728 100644 --- a/include/Nazara/Math/Vector3.inl +++ b/include/Nazara/Math/Vector3.inl @@ -77,7 +77,7 @@ T NzVector3::AngleBetween(const NzVector3& vec) const #endif T alpha = DotProduct(vec)/divisor; - return NzRadians(std::acos(NzClamp(alpha, F(-1.0), F(1.0)))); + return NzFromRadians(std::acos(NzClamp(alpha, F(-1.0), F(1.0)))); } template