00001 /* 00002 Sheep - A Rigid Body Dynamics Engine 00003 Copyright (C) 2001-2004 Francois Beaune 00004 Contact: http://toxicengine.sourceforge.net/ 00005 00006 This file is part of Sheep. 00007 00008 Sheep is free software; you can redistribute it and/or modify 00009 it under the terms of the GNU General Public License as published by 00010 the Free Software Foundation; either version 2 of the License, or 00011 (at your option) any later version. 00012 00013 Sheep is distributed in the hope that it will be useful, 00014 but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00016 GNU General Public License for more details. 00017 00018 You should have received a copy of the GNU General Public License 00019 along with Sheep; if not, write to the Free Software 00020 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00021 */ 00022 00023 #ifndef SHEEP_MATH_REAL_H 00024 #define SHEEP_MATH_REAL_H 00025 00026 #include "common/misc/config.h" 00027 00028 #include <cassert> 00029 #include <cmath> 00030 00031 namespace sheep { 00032 00033 //typedef float Real; 00034 typedef double Real; 00035 00036 const Real EPS = 1.0e-8; 00037 00038 //! Used to test two floating point numbers to see if they are close 00039 //! enough to be considered equal (not equal, less or equal, greater 00040 //! or equal, zero, not zero). Based on code by Robert Martin 00041 //! (rmartin@rcmcon.com). 00042 bool feq(Real a, Real b, Real e = EPS); //!< Equal: a == b. 00043 bool fneq(Real a, Real b, Real e = EPS); //!< Not equal: a != b. 00044 bool fle(Real a, Real b, Real e = EPS); //!< Less or equal: a <= b. 00045 bool fge(Real a, Real b, Real e = EPS); //!< Greater or equal: a >= b. 00046 bool fz(Real a, Real e = EPS); //!< Zero: a == 0. 00047 bool fnz(Real a, Real e = EPS); //!< Not zero: a != 0. 00048 00049 template<typename T> 00050 T sq(T x); 00051 00052 const Real PI = 3.1415926535897932; 00053 00054 //! Degrees to radians and radians to degrees conversion functions. 00055 Real dtor(Real d); //!< Convert degrees to radians. 00056 Real rtod(Real r); //!< Convert radians to degrees. 00057 00058 //! Expresses a given angle to [0, 2*Pi]. The input and output angles are 00059 //! expressed in radians. 00060 Real NormalizeAngle(Real angle); 00061 00062 //! Returns the smallest integer which can be expressed as a power of two, 00063 //! and which is greatest than x. x must be >= 1. 00064 int NextPowerOfTwo(double x); 00065 00066 #include "real.inl" 00067 00068 } 00069 00070 #endif // !SHEEP_MATH_REAL_H
1.3.6