diff options
author | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2007-03-03 12:01:06 +0000 |
---|---|---|
committer | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2007-03-03 12:01:06 +0000 |
commit | c2f5092d183184370b62c8003759a5093df39aba (patch) | |
tree | 20cb457158503b1ccd48001b6df793b1660723c5 /src/utils | |
parent | f9980c8854a94863b24be459d800ba57fd92037f (diff) | |
download | manaserv-c2f5092d183184370b62c8003759a5093df39aba.tar.gz manaserv-c2f5092d183184370b62c8003759a5093df39aba.tar.bz2 manaserv-c2f5092d183184370b62c8003759a5093df39aba.tar.xz manaserv-c2f5092d183184370b62c8003759a5093df39aba.zip |
Set native eol-style on recently added files.
Diffstat (limited to 'src/utils')
-rw-r--r-- | src/utils/mathutils.cpp | 198 | ||||
-rw-r--r-- | src/utils/mathutils.h | 108 |
2 files changed, 153 insertions, 153 deletions
diff --git a/src/utils/mathutils.cpp b/src/utils/mathutils.cpp index 407bba7f..59e35a22 100644 --- a/src/utils/mathutils.cpp +++ b/src/utils/mathutils.cpp @@ -1,99 +1,99 @@ -/*
- * The Mana World Server
- * Copyright 2004 The Mana World Development Team
- *
- * This file is part of The Mana World.
- *
- * The Mana World is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or any later version.
- *
- * The Mana World is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with The Mana World; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: $
- */
-
-#include "mathutils.h"
-
-#include <cmath>
-#include <float.h>
-
-#define MATH_UTILS_MAX_ANGLE 360
-
-float sinList[MATH_UTILS_MAX_ANGLE];
-float cosList[MATH_UTILS_MAX_ANGLE];
-float tanList[MATH_UTILS_MAX_ANGLE];
-
-/*
- * A very fast function to calculate the approximate inverse square root of a
- * floating point value. For an explanation of the inverse squareroot function
- * read:
- * http://www.math.purdue.edu/~clomont/Math/Papers/2003/InvSqrt.pdf
- *
- * Unfortunately the original creator of this function seems to be unknown.
- *
- * TODO: - Make this function run on 64-bit architectures
- * - Find out and fix why this function fails when compiled with the -O2
- * optimization flag on
- * gcc version 4.0.2 20050808 (prerelease) (Ubuntu 4.0.1-4ubuntu9).
- */
-float utils::math::fastInvSqrt(float x)
-{
- float xhalf = 0.5f * x;
- int i = *(int*) &x;
- i = 0x5f375a86 - (i >> 1);
- x = *(float*) &i;
- x = x * (1.5f-xhalf * x * x);
- return x;
-}
-
-float utils::math::fastSqrt(float x)
-{
- return 1.0f / utils::math::fastInvSqrt(x);
-}
-
-void utils::math::init()
-{
- // Constant for calculating an angle in radians out of an angle in degrees
- const float radianAngleRatio = M_PI_2 / 90.0f; // pi/2 / 90[deg]
-
- for (int i = 0; i < MATH_UTILS_MAX_ANGLE; i++)
- {
- sinList[i] = sin(radianAngleRatio * (float) i);
- cosList[i] = cos(radianAngleRatio * (float) i);
-
- if (i == 90)
- {
- tanList[i] = FLT_MAX; // approximately infinity
- continue;
- }
- if (i == 270)
- {
- tanList[i] = -FLT_MAX; // approximately infinity
- continue;
- }
- tanList[i] = tan(radianAngleRatio * (float) i);
- }
-}
-
-float utils::math::cachedSin(int angle)
-{
- return sinList[angle];
-}
-
-float utils::math::cachedCos(int angle)
-{
- return cosList[angle];
-}
-
-float utils::math::cachedTan(int angle)
-{
- return tanList[angle];
-}
+/* + * The Mana World Server + * Copyright 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * The Mana World is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or any later version. + * + * The Mana World is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with The Mana World; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id: $ + */ + +#include "mathutils.h" + +#include <cmath> +#include <float.h> + +#define MATH_UTILS_MAX_ANGLE 360 + +float sinList[MATH_UTILS_MAX_ANGLE]; +float cosList[MATH_UTILS_MAX_ANGLE]; +float tanList[MATH_UTILS_MAX_ANGLE]; + +/* + * A very fast function to calculate the approximate inverse square root of a + * floating point value. For an explanation of the inverse squareroot function + * read: + * http://www.math.purdue.edu/~clomont/Math/Papers/2003/InvSqrt.pdf + * + * Unfortunately the original creator of this function seems to be unknown. + * + * TODO: - Make this function run on 64-bit architectures + * - Find out and fix why this function fails when compiled with the -O2 + * optimization flag on + * gcc version 4.0.2 20050808 (prerelease) (Ubuntu 4.0.1-4ubuntu9). + */ +float utils::math::fastInvSqrt(float x) +{ + float xhalf = 0.5f * x; + int i = *(int*) &x; + i = 0x5f375a86 - (i >> 1); + x = *(float*) &i; + x = x * (1.5f-xhalf * x * x); + return x; +} + +float utils::math::fastSqrt(float x) +{ + return 1.0f / utils::math::fastInvSqrt(x); +} + +void utils::math::init() +{ + // Constant for calculating an angle in radians out of an angle in degrees + const float radianAngleRatio = M_PI_2 / 90.0f; // pi/2 / 90[deg] + + for (int i = 0; i < MATH_UTILS_MAX_ANGLE; i++) + { + sinList[i] = sin(radianAngleRatio * (float) i); + cosList[i] = cos(radianAngleRatio * (float) i); + + if (i == 90) + { + tanList[i] = FLT_MAX; // approximately infinity + continue; + } + if (i == 270) + { + tanList[i] = -FLT_MAX; // approximately infinity + continue; + } + tanList[i] = tan(radianAngleRatio * (float) i); + } +} + +float utils::math::cachedSin(int angle) +{ + return sinList[angle]; +} + +float utils::math::cachedCos(int angle) +{ + return cosList[angle]; +} + +float utils::math::cachedTan(int angle) +{ + return tanList[angle]; +} diff --git a/src/utils/mathutils.h b/src/utils/mathutils.h index 31f48805..222ccc15 100644 --- a/src/utils/mathutils.h +++ b/src/utils/mathutils.h @@ -1,54 +1,54 @@ -/*
- * The Mana World Server
- * Copyright 2004 The Mana World Development Team
- *
- * This file is part of The Mana World.
- *
- * The Mana World is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or any later version.
- *
- * The Mana World is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with The Mana World; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: $
- */
-
-#ifndef _TMWSERV_MATHUTILS_H_
-#define _TMWSERV_MATHUTILS_H_
-
-namespace utils
-{
- namespace math
- {
- /**
- * A very fast function to calculate the approximate inverse square
- * root of a floating point value.
- */
- float fastInvSqrt(float x);
-
- /**
- * A helper function that uses the fastInvSqrt for getting the
- * normal squareroot.
- */
- float fastSqrt(float x);
-
- float cachedSin(int angle);
-
- float cachedCos(int angle);
-
- float cachedTan(int angle);
-
- void init();
-
- } // namespace math
-
-} // namespace utils
-
-#endif
+/* + * The Mana World Server + * Copyright 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * The Mana World is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or any later version. + * + * The Mana World is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with The Mana World; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id: $ + */ + +#ifndef _TMWSERV_MATHUTILS_H_ +#define _TMWSERV_MATHUTILS_H_ + +namespace utils +{ + namespace math + { + /** + * A very fast function to calculate the approximate inverse square + * root of a floating point value. + */ + float fastInvSqrt(float x); + + /** + * A helper function that uses the fastInvSqrt for getting the + * normal squareroot. + */ + float fastSqrt(float x); + + float cachedSin(int angle); + + float cachedCos(int angle); + + float cachedTan(int angle); + + void init(); + + } // namespace math + +} // namespace utils + +#endif |