forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			158 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			158 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | #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 "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
 |