Bullet Collision Detection & Physics Library
src
BulletCollision
Gimpact
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
#define GREAL btScalar
38
#define GREAL2 double
39
#define GINT int
40
#define GUINT unsigned int
41
#define GSHORT short
42
#define GUSHORT unsigned short
43
#define GINT64 long long
44
#define GUINT64 unsigned long long
45
46
#define G_PI 3.14159265358979f
47
#define G_HALF_PI 1.5707963f
48
//267948966
49
#define G_TWO_PI 6.28318530f
50
//71795864
51
#define G_ROOT3 1.73205f
52
#define G_ROOT2 1.41421f
53
#define G_UINT_INFINITY 0xffffffff
54
#define G_REAL_INFINITY FLT_MAX
55
#define G_SIGN_BITMASK 0x80000000
56
#define G_EPSILON SIMD_EPSILON
57
58
enum
GIM_SCALAR_TYPES
59
{
60
G_STYPE_REAL
= 0,
61
G_STYPE_REAL2
,
62
G_STYPE_SHORT
,
63
G_STYPE_USHORT
,
64
G_STYPE_INT
,
65
G_STYPE_UINT
,
66
G_STYPE_INT64
,
67
G_STYPE_UINT64
68
};
69
70
#define G_DEGTORAD(X) ((X)*3.1415926f / 180.0f)
71
#define G_RADTODEG(X) ((X)*180.0f / 3.1415926f)
72
74
#define GIM_IR(x) ((GUINT&)(x))
75
77
#define GIM_SIR(x) ((GINT&)(x))
78
80
#define GIM_AIR(x) (GIM_IR(x) & 0x7fffffff)
81
83
#define GIM_FR(x) ((GREAL&)(x))
84
85
#define GIM_MAX(a, b) (a < b ? b : a)
86
#define GIM_MIN(a, b) (a > b ? b : a)
87
88
#define GIM_MAX3(a, b, c) GIM_MAX(a, GIM_MAX(b, c))
89
#define GIM_MIN3(a, b, c) GIM_MIN(a, GIM_MIN(b, c))
90
91
#define GIM_IS_ZERO(value) (value < G_EPSILON && value > -G_EPSILON)
92
93
#define GIM_IS_NEGATIVE(value) (value <= -G_EPSILON)
94
95
#define GIM_IS_POSISITVE(value) (value >= G_EPSILON)
96
97
#define GIM_NEAR_EQUAL(v1, v2) GIM_IS_ZERO((v1 - v2))
98
100
#define GIM_CLAMP(number, minval, maxval) (number < minval ? minval : (number > maxval ? maxval : number))
101
102
#define GIM_GREATER(x, y) btFabs(x) > (y)
103
105
#define GIM_SWAP_NUMBERS(a, b) \
106
{ \
107
a = a + b; \
108
b = a - b; \
109
a = a - b; \
110
}
111
112
#define GIM_INV_SQRT(va, isva) \
113
{ \
114
if (va <= 0.0000001f) \
115
{ \
116
isva = G_REAL_INFINITY; \
117
} \
118
else \
119
{ \
120
GREAL _x = va * 0.5f; \
121
GUINT _y = 0x5f3759df - (GIM_IR(va) >> 1); \
122
isva = GIM_FR(_y); \
123
isva = isva * (1.5f - (_x * isva * isva)); \
124
} \
125
}
126
127
#define GIM_SQRT(va, sva) \
128
{ \
129
GIM_INV_SQRT(va, sva); \
130
sva = 1.0f / sva; \
131
}
132
134
inline
GREAL
gim_inv_sqrt
(
GREAL
f)
135
{
136
GREAL
r;
137
GIM_INV_SQRT
(f, r);
138
return
r;
139
}
140
141
inline
GREAL
gim_sqrt
(
GREAL
f)
142
{
143
GREAL
r;
144
GIM_SQRT
(f, r);
145
return
r;
146
}
147
148
#endif // GIM_MATH_H_INCLUDED
GREAL
#define GREAL
Definition:
gim_math.h:37
G_STYPE_USHORT
Definition:
gim_math.h:63
G_STYPE_INT64
Definition:
gim_math.h:66
btScalar.h
gim_sqrt
GREAL gim_sqrt(GREAL f)
Definition:
gim_math.h:141
G_STYPE_UINT64
Definition:
gim_math.h:67
GIM_SQRT
#define GIM_SQRT(va, sva)
Definition:
gim_math.h:127
G_STYPE_SHORT
Definition:
gim_math.h:62
GIM_SCALAR_TYPES
GIM_SCALAR_TYPES
Definition:
gim_math.h:58
gim_inv_sqrt
GREAL gim_inv_sqrt(GREAL f)
Computes 1.0f / sqrtf(x). Comes from Quake3. See http://www.magic-software.com/3DGEDInvSqrt....
Definition:
gim_math.h:134
G_STYPE_REAL2
Definition:
gim_math.h:61
G_STYPE_UINT
Definition:
gim_math.h:65
G_STYPE_INT
Definition:
gim_math.h:64
G_STYPE_REAL
Definition:
gim_math.h:60
GIM_INV_SQRT
#define GIM_INV_SQRT(va, isva)
Definition:
gim_math.h:112
Generated by
1.8.16