Bullet Collision Detection & Physics Library
gim_math.h
Go to the documentation of this file.
1 #ifndef GIM_MATH_H_INCLUDED
2 #define GIM_MATH_H_INCLUDED
3 
6 /*
7 -----------------------------------------------------------------------------
8 This source file is part of GIMPACT Library.
9 
10 For the latest info, see http://gimpact.sourceforge.net/
11 
12 Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
13 email: projectileman@yahoo.com
14 
15  This library is free software; you can redistribute it and/or
16  modify it under the terms of EITHER:
17  (1) The GNU Lesser General Public License as published by the Free
18  Software Foundation; either version 2.1 of the License, or (at
19  your option) any later version. The text of the GNU Lesser
20  General Public License is included with this library in the
21  file GIMPACT-LICENSE-LGPL.TXT.
22  (2) The BSD-style license that is included with this library in
23  the file GIMPACT-LICENSE-BSD.TXT.
24  (3) The zlib/libpng license that is included with this library in
25  the file GIMPACT-LICENSE-ZLIB.TXT.
26 
27  This library is distributed in the hope that it will be useful,
28  but WITHOUT ANY WARRANTY; without even the implied warranty of
29  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
30  GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details.
31 
32 -----------------------------------------------------------------------------
33 */
34 
35 #include "LinearMath/btScalar.h"
36 
37 
38 
39 #define GREAL btScalar
40 #define GREAL2 double
41 #define GINT int
42 #define GUINT unsigned int
43 #define GSHORT short
44 #define GUSHORT unsigned short
45 #define GINT64 long long
46 #define GUINT64 unsigned long long
47 
48 
49 
50 #define G_PI 3.14159265358979f
51 #define G_HALF_PI 1.5707963f
52 //267948966
53 #define G_TWO_PI 6.28318530f
54 //71795864
55 #define G_ROOT3 1.73205f
56 #define G_ROOT2 1.41421f
57 #define G_UINT_INFINITY 0xffffffff
58 #define G_REAL_INFINITY FLT_MAX
59 #define G_SIGN_BITMASK 0x80000000
60 #define G_EPSILON SIMD_EPSILON
61 
62 
63 
65 {
74 };
75 
76 
77 
78 #define G_DEGTORAD(X) ((X)*3.1415926f/180.0f)
79 #define G_RADTODEG(X) ((X)*180.0f/3.1415926f)
80 
82 #define GIM_IR(x) ((GUINT&)(x))
83 
85 #define GIM_SIR(x) ((GINT&)(x))
86 
88 #define GIM_AIR(x) (GIM_IR(x)&0x7fffffff)
89 
91 #define GIM_FR(x) ((GREAL&)(x))
92 
93 #define GIM_MAX(a,b) (a<b?b:a)
94 #define GIM_MIN(a,b) (a>b?b:a)
95 
96 #define GIM_MAX3(a,b,c) GIM_MAX(a,GIM_MAX(b,c))
97 #define GIM_MIN3(a,b,c) GIM_MIN(a,GIM_MIN(b,c))
98 
99 #define GIM_IS_ZERO(value) (value < G_EPSILON && value > -G_EPSILON)
100 
101 #define GIM_IS_NEGATIVE(value) (value <= -G_EPSILON)
102 
103 #define GIM_IS_POSISITVE(value) (value >= G_EPSILON)
104 
105 #define GIM_NEAR_EQUAL(v1,v2) GIM_IS_ZERO((v1-v2))
106 
108 #define GIM_CLAMP(number,minval,maxval) (number<minval?minval:(number>maxval?maxval:number))
109 
110 #define GIM_GREATER(x, y) btFabs(x) > (y)
111 
113 #define GIM_SWAP_NUMBERS(a,b){ \
114  a = a+b; \
115  b = a-b; \
116  a = a-b; \
117 }\
118 
119 #define GIM_INV_SQRT(va,isva)\
120 {\
121  if(va<=0.0000001f)\
122  {\
123  isva = G_REAL_INFINITY;\
124  }\
125  else\
126  {\
127  GREAL _x = va * 0.5f;\
128  GUINT _y = 0x5f3759df - ( GIM_IR(va) >> 1);\
129  isva = GIM_FR(_y);\
130  isva = isva * ( 1.5f - ( _x * isva * isva ) );\
131  }\
132 }\
133 
134 #define GIM_SQRT(va,sva)\
135 {\
136  GIM_INV_SQRT(va,sva);\
137  sva = 1.0f/sva;\
138 }\
139 
140 inline GREAL gim_inv_sqrt(GREAL f)
142 {
143  GREAL r;
144  GIM_INV_SQRT(f,r);
145  return r;
146 }
147 
149 {
150  GREAL r;
151  GIM_SQRT(f,r);
152  return r;
153 }
154 
155 
156 
157 #endif // GIM_MATH_H_INCLUDED
#define GIM_INV_SQRT(va, isva)
Definition: gim_math.h:119
#define GIM_SQRT(va, sva)
Definition: gim_math.h:134
GIM_SCALAR_TYPES
Definition: gim_math.h:64
GREAL gim_inv_sqrt(GREAL f)
Computes 1.0f / sqrtf(x). Comes from Quake3. See http://www.magic-software.com/3DGEDInvSqrt.html.
Definition: gim_math.h:141
#define GREAL
Definition: gim_math.h:39
GREAL gim_sqrt(GREAL f)
Definition: gim_math.h:148