From abb8ae09361d6a9e19383c21d65e085fa41c0d1e Mon Sep 17 00:00:00 2001 From: David Fioramonti Date: Wed, 2 May 2018 04:28:54 -0700 Subject: COMMON: Template deg2rad and rad2deg in Common/math The input and output type can be different. Currently, rad2deg is only being used by sci (float to int) and deg2rad in wintermute. --- common/math.h | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/common/math.h b/common/math.h index ddb5c67dfe..a8e07686ff 100644 --- a/common/math.h +++ b/common/math.h @@ -107,12 +107,46 @@ inline int intLog2(uint32 v) { } #endif -inline float rad2deg(float rad) { - return rad * 180.0f / (float)M_PI; +// Convert radians to degrees +// Input and Output type can be different +// Upconvert everything to floats +template +inline outputT rad2deg(inputT rad) { + return (outputT)( (float)rad * (float)57.2957795130823); // 180.0/M_PI = 57.2957795130823 } -inline float deg2rad(float deg) { - return deg * (float)M_PI / 180.0f; +// Handle the case differently when the input type is double +template +inline outputT rad2deg(double rad) { + return (outputT)( rad * 57.2957795130823); +} + +// Convert radians to degrees +// Input and Output type are the same +template +inline T rad2deg(T rad) { + return rad2deg(rad); +} + +// Convert degrees to radians +// Input and Output type can be different +// Upconvert everything to floats +template +inline outputT deg2rad(inputT deg) { + return (outputT)( (float)deg * (float)0.0174532925199433); // M_PI/180.0 = 0.0174532925199433 +} + +// Handle the case differently when the input type is double +template +inline outputT deg2rad(double deg) { + return (outputT)( deg * 0.0174532925199433); +} + +// Convert degrees to radians +// Input and Output type are the same +template +inline T deg2rad(T deg) { + return deg2rad(deg); } } // End of namespace Common -- cgit v1.2.3