From 7e9c5e9a0639b8033a6ddec89a6555e30b26ec29 Mon Sep 17 00:00:00 2001 From: Lynix Date: Tue, 20 Jan 2015 15:05:37 +0100 Subject: [PATCH] Improved NomalizeAngle function Former-commit-id: 79793b0c57a333e6d2d4a41a14f2b7fdc1d1f093 --- include/Nazara/Math/Algorithm.inl | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/include/Nazara/Math/Algorithm.inl b/include/Nazara/Math/Algorithm.inl index 49b54be32..c85a6ae4f 100644 --- a/include/Nazara/Math/Algorithm.inl +++ b/include/Nazara/Math/Algorithm.inl @@ -210,29 +210,20 @@ T NzNormalizeAngle(T angle) #else const T limit = F(180.0); #endif + const T twoLimit = limit*F(2.0); - ///TODO: Trouver une solution sans duplication - if (angle > F(0.0)) - { - angle += limit; - angle -= static_cast(angle / (F(2.0)*limit)) * (F(2.0)*limit); - angle -= limit; - } - else - { - angle -= limit; - angle -= static_cast(angle / (F(2.0)*limit)) * (F(2.0)*limit); - angle += limit; - } + angle = std::fmod(angle + limit, twoLimit); + if (angle < F(0.0)) + angle += twoLimit; - return angle; + return angle - limit; } template bool NzNumberEquals(T a, T b, T maxDifference) { T diff = a - b; - if (diff < 0) + if (diff < F(0.0)) diff = -diff; return diff <= maxDifference;