123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- #ifndef GIM_MATH_H_INCLUDED
- #define GIM_MATH_H_INCLUDED
- /*! \file gim_math.h
- \author Francisco Leon Najera
- */
- /*
- -----------------------------------------------------------------------------
- This source file is part of GIMPACT Library.
- For the latest info, see http://gimpact.sourceforge.net/
- Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
- email: projectileman@yahoo.com
- This library is free software; you can redistribute it and/or
- modify it under the terms of EITHER:
- (1) The GNU Lesser General Public License as published by the Free
- Software Foundation; either version 2.1 of the License, or (at
- your option) any later version. The text of the GNU Lesser
- General Public License is included with this library in the
- file GIMPACT-LICENSE-LGPL.TXT.
- (2) The BSD-style license that is included with this library in
- the file GIMPACT-LICENSE-BSD.TXT.
- (3) The zlib/libpng license that is included with this library in
- the file GIMPACT-LICENSE-ZLIB.TXT.
- This library 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 files
- GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details.
- -----------------------------------------------------------------------------
- */
- #include "bullet/LinearMath/btScalar.h"
- #define GREAL btScalar
- #define GREAL2 double
- #define GINT int
- #define GUINT unsigned int
- #define GSHORT short
- #define GUSHORT unsigned short
- #define GINT64 long long
- #define GUINT64 unsigned long long
- #define G_PI 3.14159265358979f
- #define G_HALF_PI 1.5707963f
- //267948966
- #define G_TWO_PI 6.28318530f
- //71795864
- #define G_ROOT3 1.73205f
- #define G_ROOT2 1.41421f
- #define G_UINT_INFINITY 0xffffffff //!< A very very high value
- #define G_REAL_INFINITY FLT_MAX
- #define G_SIGN_BITMASK 0x80000000
- #define G_EPSILON SIMD_EPSILON
- enum GIM_SCALAR_TYPES
- {
- G_STYPE_REAL =0,
- G_STYPE_REAL2,
- G_STYPE_SHORT,
- G_STYPE_USHORT,
- G_STYPE_INT,
- G_STYPE_UINT,
- G_STYPE_INT64,
- G_STYPE_UINT64
- };
- #define G_DEGTORAD(X) ((X)*3.1415926f/180.0f)
- #define G_RADTODEG(X) ((X)*180.0f/3.1415926f)
- //! Integer representation of a floating-point value.
- #define GIM_IR(x) ((GUINT&)(x))
- //! Signed integer representation of a floating-point value.
- #define GIM_SIR(x) ((GINT&)(x))
- //! Absolute integer representation of a floating-point value
- #define GIM_AIR(x) (GIM_IR(x)&0x7fffffff)
- //! Floating-point representation of an integer value.
- #define GIM_FR(x) ((GREAL&)(x))
- #define GIM_MAX(a,b) (a<b?b:a)
- #define GIM_MIN(a,b) (a>b?b:a)
- #define GIM_MAX3(a,b,c) GIM_MAX(a,GIM_MAX(b,c))
- #define GIM_MIN3(a,b,c) GIM_MIN(a,GIM_MIN(b,c))
- #define GIM_IS_ZERO(value) (value < G_EPSILON && value > -G_EPSILON)
- #define GIM_IS_NEGATIVE(value) (value <= -G_EPSILON)
- #define GIM_IS_POSISITVE(value) (value >= G_EPSILON)
- #define GIM_NEAR_EQUAL(v1,v2) GIM_IS_ZERO((v1-v2))
- ///returns a clamped number
- #define GIM_CLAMP(number,minval,maxval) (number<minval?minval:(number>maxval?maxval:number))
- #define GIM_GREATER(x, y) btFabs(x) > (y)
- ///Swap numbers
- #define GIM_SWAP_NUMBERS(a,b){ \
- a = a+b; \
- b = a-b; \
- a = a-b; \
- }\
- #define GIM_INV_SQRT(va,isva)\
- {\
- if(va<=0.0000001f)\
- {\
- isva = G_REAL_INFINITY;\
- }\
- else\
- {\
- GREAL _x = va * 0.5f;\
- GUINT _y = 0x5f3759df - ( GIM_IR(va) >> 1);\
- isva = GIM_FR(_y);\
- isva = isva * ( 1.5f - ( _x * isva * isva ) );\
- }\
- }\
- #define GIM_SQRT(va,sva)\
- {\
- GIM_INV_SQRT(va,sva);\
- sva = 1.0f/sva;\
- }\
- //! Computes 1.0f / sqrtf(x). Comes from Quake3. See http://www.magic-software.com/3DGEDInvSqrt.html
- inline GREAL gim_inv_sqrt(GREAL f)
- {
- GREAL r;
- GIM_INV_SQRT(f,r);
- return r;
- }
- inline GREAL gim_sqrt(GREAL f)
- {
- GREAL r;
- GIM_SQRT(f,r);
- return r;
- }
- #endif // GIM_MATH_H_INCLUDED
|