From 591a9ff13f3509b6e67a74b6923829825466d46b Mon Sep 17 00:00:00 2001 From: notpete Date: Sat, 29 May 2004 21:06:30 +0000 Subject: [PATCH] Moved MathUtil files to maths directory. This was SVN commit r312. --- source/ps/MathUtil.cpp | 246 ----------------------------------------- source/ps/MathUtil.h | 204 ---------------------------------- 2 files changed, 450 deletions(-) delete mode 100755 source/ps/MathUtil.cpp delete mode 100755 source/ps/MathUtil.h diff --git a/source/ps/MathUtil.cpp b/source/ps/MathUtil.cpp deleted file mode 100755 index 1e1208df80..0000000000 --- a/source/ps/MathUtil.cpp +++ /dev/null @@ -1,246 +0,0 @@ -// last modified Thursday, May 08, 2003 - -#include -#include - -#include "MathUtil.h" - - -// MathUtil Errors -DEFINE_ERROR(ERRONEOUS_BOUND_ERROR, "Lower Bound is >= Upper Bound"); - - - -////////////////////////////////////////////////////////////////////// -// NAME: CompareFloat -// PURPOSE: Returns true if two floating point numbers are within -// FL_FP_TOLERANCE of each other. -// -_bool MathUtil::CompareFloat(const _double &num1, const _double &num2) -{ - if( Abs(num1 - num2) < FL_FP_TOLERANCE ) - return true; - else - return false; -} - - -////////////////////////////////////////////////////////////////////// -// NAME: RadiansToDegrees -// PURPOSE: Converts from Radians to Degrees -// -inline _double MathUtil::RadiansToDegrees(const _double &num) -{ - return num*(PI/180); -} - - -////////////////////////////////////////////////////////////////////// -// NAME: RadiansToDegrees -// PURPOSE: Converts from Degrees to Radians -// -inline _double MathUtil::DegreesToRadians(const _double &num) -{ - return (num*180)/PI; -} - -/* -////////////////////////////////////////////////////////////////////// -// NAME: Random -// PURPOSE: returns a random floating point number between lowerBound -// and upperBound -// NOTES: returns -1 if lowerBound >= upperBound -// -_float MathUtil::Random(const _float &lowerBound, const _float &upperBound) -{ - - if( lowerBound >= upperBound) - return -1; - else - { - // seed generator with current time - srand( static_cast( time(NULL) ) ); - - // finds a floating point number between 0 and 1.0 - _float randVar = ( static_cast<_float>( rand() )/RAND_MAX ); - - // maps the number onto the set from 0 to upperBound - randVar *= Abs(lowerBound - upperBound ) + 1; - - //translate to the proper range - randVar += lowerBound; - - return randVar; - } -} - - -////////////////////////////////////////////////////////////////////// -// NAME: Random -// PURPOSE: returns a random number between lowerBound and upperBound -// NOTES: returns -1 if lowerBound >= upperBound -// -_int MathUtil::Random(const _int &lowerBound,const _int &upperBound) -{ - if( lowerBound >= upperBound) - return -1; - else - { - // seed generator with current time - srand( static_cast( time(NULL) ) ); - - // find a random variable between 0 and range size - _int randVar = rand()%( Abs(upperBound - lowerBound) + 1); - - // translate to proper range - randVar += lowerBound; - - return randVar; - } -} -*/ - -////////////////////////////////////////////////////////// -// NAME: Round -// PURPOSE: Rounds a number. -// NOTES: Round rounds to the nearest representable number -// float version. -// -_int MathUtil::Round(const float &num) -{ - if( num > 0 ) - return static_cast<_int>(num + .5); - else if (num < 0 ) - return static_cast<_int>(num - .5); - else - return 0; -} - - -////////////////////////////////////////////////////////// -// NAME: Round -// PURPOSE: Rounds a number. -// NOTES: Round rounds to the nearest representable number -// double version. -// -_int MathUtil::Round(const double &num) -{ - if( num > 0 ) - return static_cast<_int>(num + .5); - else if (num < 0 ) - return static_cast<_int>(num - .5); - else - return 0; -} - - -////////////////////////////////////////////////////////////////////// -// NAME: SignedModulus -// PURPOSE: returns a mathematically correct modulus for int -// -_int MathUtil::SignedModulus(const _int &num, const _int &n) -{ - if( num >= 0 ) - return num%n; - else - { - // the % operator reflects the range if num < 0, so - // we have to multiply by -1 to reflect it back. This method - // is faster than calling Abs() and then doing the modulus. - _int Tnum = -1*(num%n); - - // if num%n equals 0, then n - Tnum will be n, which, logically - // speaking, is 0 in a different form, but we have to make sure it's - // in the form 0, and not n. Therefore, if Tnum = 0, simply leave - // it like that. - if( Tnum != 0) - Tnum = n - Tnum; - - return Tnum; - } -} - - -////////////////////////////////////////////////////////////////////// -// NAME: SignedModulus -// PURPOSE: returns a mathematically correct modulus for long -// -_long MathUtil::SignedModulus(const _long &num, const _long &n) -{ - if( num >= 0 ) - return num%n; - else - { - // the % operator reflects the range if num < 0, so - // we have to multiply by -1 to reflect it back. This method - // is faster than calling Abs() and then doing the modulus. - _long Tnum = -1*(num%n); - - // if num%n equals 0, then n - Tnum will be n, which, logically - // speaking, is 0 in a different form, but we have to make sure it's - // in the form 0, and not n. Therefore, if Tnum = 0, simply leave - // it like that. - if( Tnum != 0) - Tnum = n - Tnum; - - return Tnum; - } -} - - -////////////////////////////////////////////////////////////////////// -// NAME: SignedModulus -// PURPOSE: returns a mathematically correct modulus for float -// NOTES: uses fmod() in math.h, which returns the modulus of floats -// -_float MathUtil::SignedModulus(const _float &num, const _float &n) -{ - if( num >=0 ) - return static_cast<_float>( fmod(num,n) ); - else - { - // the % operator reflects the range if num < 0, so - // we have to multiply by -1 to reflect it back. This method - // is faster than calling Abs() and then doing the modulus. - _float Tnum = -1*( static_cast<_float>( fmod(num,n) ) ); - - // if num%n equals 0, then n - Tnum will be n, which, logically - // speaking, is 0 in a different form, but we have to make sure it's - // in the form 0, and not n. Therefore, if Tnum = 0, simply leave - // it like that. - if( Tnum != 0) - Tnum = n - Tnum; - - return Tnum; - } - -} - - -////////////////////////////////////////////////////////////////////// -// NAME: SignedModulus -// PURPOSE: returns a mathematically correct modulus for double -// NOTES: uses fmod() in math.h, which returns the modulus of floats -// -_double MathUtil::SignedModulus(const _double &num, const _double &n) -{ - if( num >=0 ) - return fmod(num,n); - else - { - // the % operator reflects the range if num < 0, so - // we have to multiply by -1 to reflect it back. This method - // is faster than calling Abs() and then doing the modulus. - _double Tnum = -1*( fmod(num,n) ); - - // if num%n equals 0, then n - Tnum will be n, which, logically - // speaking, is 0 in a different form, but we have to make sure it's - // in the form 0, and not n. Therefore, if Tnum = 0, simply leave - // it like that. - if( Tnum != 0) - Tnum = n - Tnum; - - return Tnum; - } - -} diff --git a/source/ps/MathUtil.h b/source/ps/MathUtil.h deleted file mode 100755 index 9a9a51a6f3..0000000000 --- a/source/ps/MathUtil.h +++ /dev/null @@ -1,204 +0,0 @@ -/* -Math utility functions -by Michael Reiland -recondite_phreak@yahool.com - ---Overview-- - - Contains common math functions like Abs, Sign, Max, Min, etc. - - ---More info-- - - TODO: actually write corresponding documentation - http://wildfiregames.com/0ad/codepit/TDD/math_utils.html - -*/ - - -#ifndef MATH_UTIL_H -#define MATH_UTIL_H - - -//-------------------------------------------------------- -// Includes / Compiler directives -//-------------------------------------------------------- - -#include "Prometheus.h" // Standard Engine Include -#include // Needed for fmod() - -//-------------------------------------------------------- -// Error declarations -//-------------------------------------------------------- - - -// MathUtil Errors -DECLARE_ERROR(ERRONEOUS_BOUND_ERROR); - - -//-------------------------------------------------------- -// Declarations -//-------------------------------------------------------- - -namespace MathUtil -{ - const _double PI = 3.14159265358932384; - const _double FL_FP_TOLERANCE = .000000001; - - - //-------------------------------------------------------- - // Template functions - //-------------------------------------------------------- - - - //-------------------------------------------------------- - // Declarations - //-------------------------------------------------------- - - ////////////////////////////////////////////////////////// - // NAME: Abs - // PURPOSE: Calculates the Absolute value - // - template - T Abs(const T &num) - { - if( num < 0) - return -1*num; - return num; - } - - - ////////////////////////////////////////////////////////// - // NAME: Clamp - // PURPOSE: Forces num to be between lowerBound and upperBound - // - template - T Clamp(T &num, const _int &lowerBound,const _int &upperBound) - { - if(num <= lowerBound) - num = static_cast(lowerBound); - else if( num >= upperBound) - num = static_cast(upperBound); - } - - - ////////////////////////////////////////////////////////// - // NAME: Max - // PURPOSE: Returns the largest number. - // - template - T Max(const T &num1, const T &num2) - { - if( num1 > num2) - return num1; - else - return num2; - } - - - ////////////////////////////////////////////////////////// - // NAME: Min - // PURPOSE: Returns the smallest number. - // - template - T Min(const T &num1, const T &num2) - { - if( num1 < num2) - return num1; - else - return num2; - } - - - ////////////////////////////////////////////////////////// - // NAME: Sign - // PURPOSE: Returns 1 if the number is > 0, -1 if it's < 0, - // otherwise returns 0. - // - template - _int Sign(const T &num) - { - if( num > 0 ) - return 1; - else if( num < 0 ) - return -1; - else - return 0; - } - - - ////////////////////////////////////////////////////////// - // NAME: Square - // PURPOSE: Returns the square of a number - // NOTES: Num should be less than the square root of the - // maximum representable number for the data type. - // - template - inline _double Square(const T &num) - { - return num*num; - } - - - ////////////////////////////////////////////////////////// - // NAME: Swap - // PURPOSE: Swaps two numbers - // - template - void Swap(T *num1, T *num2) - { - T temp = num1; - num1 = num2; - num2 = temp; - } - - - ////////////////////////////////////////////////////////// - // NAME: Wrap - // PURPOSE: Wraps num between lowerBound and upperBound. - // - template - PS_RESULT Wrap(T *num,const T &lowerBound, const T &upperBound) - { - if(lowerBound >= upperBound) - return ERRONEOUS_BOUND_ERROR; - else - { - // translate to range 0 to n-1, find the modulus, then - // translate back to range lowerBound to upperBound. - num -= lowerBound; - num = SignedModulus( num, Abs(upperBound - lowerBound) ); - num += lowerBound; - } - return PS_OK; - } - - - - //-------------------------------------------------------- - // Non-template functions - //-------------------------------------------------------- - - _int Ceiling(const float &num); - _int Ceiling(const double &num); - - _bool CompareFloat(const _double &, const _double &); - - _int Floor(const float &num); - _int Floor(const double &num); - - inline _double RadiansToDegrees(const _double &num); - inline _double DegreesToRadians(const _double &num); - - _float Random(const _float &, const _float &); - _int Random(const _int &,const _int &); - - _int Round(const float &num); - _int Round(const double &num); - - _int SignedModulus(const _int &num, const _int &n); - _long SignedModulus(const _long &num, const _long &n); - _float SignedModulus(const _float &num, const _float &n); - _double SignedModulus(const _double &num, const _double &n); -} -#endif