1
#ifndef GIM_MATH_H_INCLUDED
2
#define GIM_MATH_H_INCLUDED
4
\author Francisco Len N�jera
7
-----------------------------------------------------------------------------
8
This source file is part of GIMPACT Library.
10
For the latest info, see http://gimpact.sourceforge.net/
12
Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
13
email: projectileman@yahoo.com
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.
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.
32
-----------------------------------------------------------------------------
35
#include "LinearMath/btScalar.h"
38
/*! \defgroup BASIC_TYPES
39
Basic types and constants
42
Constants starting with G_
46
#define GREAL btScalar
49
#define GUINT unsigned int
51
#define GUSHORT unsigned short
52
#define GINT64 long long
53
#define GUINT64 unsigned long long
57
/*! \defgroup BASIC_CONSTANTS
61
Constants starting with G_
65
#define G_PI 3.14159265358979f
66
#define G_HALF_PI 1.5707963f
68
#define G_TWO_PI 6.28318530f
70
#define G_ROOT3 1.73205f
71
#define G_ROOT2 1.41421f
72
#define G_UINT_INFINITY 0xffffffff //!< A very very high value
73
#define G_REAL_INFINITY FLT_MAX
74
#define G_SIGN_BITMASK 0x80000000
75
#define G_EPSILON SIMD_EPSILON
79
/*! \defgroup SCALAR_TYPES
81
Precision type constants
97
/*! \defgroup MATH_FUNCTIONS
98
mathematical functions
102
#define G_DEGTORAD(X) ((X)*3.1415926f/180.0f)
103
#define G_RADTODEG(X) ((X)*180.0f/3.1415926f)
105
//! Integer representation of a floating-point value.
106
#define GIM_IR(x) ((GUINT&)(x))
108
//! Signed integer representation of a floating-point value.
109
#define GIM_SIR(x) ((GINT&)(x))
111
//! Absolute integer representation of a floating-point value
112
#define GIM_AIR(x) (GIM_IR(x)&0x7fffffff)
114
//! Floating-point representation of an integer value.
115
#define GIM_FR(x) ((GREAL&)(x))
117
#define GIM_MAX(a,b) (a<b?b:a)
118
#define GIM_MIN(a,b) (a>b?b:a)
120
#define GIM_MAX3(a,b,c) GIM_MAX(a,GIM_MAX(b,c))
121
#define GIM_MIN3(a,b,c) GIM_MIN(a,GIM_MIN(b,c))
123
#define GIM_IS_ZERO(value) (value < G_EPSILON && value > -G_EPSILON)
125
#define GIM_IS_NEGATIVE(value) (value <= -G_EPSILON)
127
#define GIM_IS_POSISITVE(value) (value >= G_EPSILON)
129
#define GIM_NEAR_EQUAL(v1,v2) GIM_IS_ZERO((v1-v2))
131
///returns a clamped number
132
#define GIM_CLAMP(number,minval,maxval) (number<minval?minval:(number>maxval?maxval:number))
134
#define GIM_GREATER(x, y) fabsf(x) > (y)
137
#define GIM_SWAP_NUMBERS(a,b){ \
143
#define GIM_INV_SQRT(va,isva)\
147
isva = G_REAL_INFINITY;\
151
GREAL _x = va * 0.5f;\
152
GUINT _y = 0x5f3759df - ( GIM_IR(va) >> 1);\
154
isva = isva * ( 1.5f - ( _x * isva * isva ) );\
158
#define GIM_SQRT(va,sva)\
160
GIM_INV_SQRT(va,sva);\
164
//! Computes 1.0f / sqrtf(x). Comes from Quake3. See http://www.magic-software.com/3DGEDInvSqrt.html
165
inline GREAL gim_inv_sqrt(GREAL f)
172
inline GREAL gim_sqrt(GREAL f)
181
#endif // GIM_MATH_H_INCLUDED
1
#ifndef GIM_MATH_H_INCLUDED
2
#define GIM_MATH_H_INCLUDED
4
\author Francisco Len N�jera
7
-----------------------------------------------------------------------------
8
This source file is part of GIMPACT Library.
10
For the latest info, see http://gimpact.sourceforge.net/
12
Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
13
email: projectileman@yahoo.com
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.
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.
32
-----------------------------------------------------------------------------
35
#include "LinearMath/btScalar.h"
39
#define GREAL btScalar
42
#define GUINT unsigned int
44
#define GUSHORT unsigned short
45
#define GINT64 long long
46
#define GUINT64 unsigned long long
50
#define G_PI 3.14159265358979f
51
#define G_HALF_PI 1.5707963f
53
#define G_TWO_PI 6.28318530f
55
#define G_ROOT3 1.73205f
56
#define G_ROOT2 1.41421f
57
#define G_UINT_INFINITY 0xffffffff //!< A very very high value
58
#define G_REAL_INFINITY FLT_MAX
59
#define G_SIGN_BITMASK 0x80000000
60
#define G_EPSILON SIMD_EPSILON
78
#define G_DEGTORAD(X) ((X)*3.1415926f/180.0f)
79
#define G_RADTODEG(X) ((X)*180.0f/3.1415926f)
81
//! Integer representation of a floating-point value.
82
#define GIM_IR(x) ((GUINT&)(x))
84
//! Signed integer representation of a floating-point value.
85
#define GIM_SIR(x) ((GINT&)(x))
87
//! Absolute integer representation of a floating-point value
88
#define GIM_AIR(x) (GIM_IR(x)&0x7fffffff)
90
//! Floating-point representation of an integer value.
91
#define GIM_FR(x) ((GREAL&)(x))
93
#define GIM_MAX(a,b) (a<b?b:a)
94
#define GIM_MIN(a,b) (a>b?b:a)
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))
99
#define GIM_IS_ZERO(value) (value < G_EPSILON && value > -G_EPSILON)
101
#define GIM_IS_NEGATIVE(value) (value <= -G_EPSILON)
103
#define GIM_IS_POSISITVE(value) (value >= G_EPSILON)
105
#define GIM_NEAR_EQUAL(v1,v2) GIM_IS_ZERO((v1-v2))
107
///returns a clamped number
108
#define GIM_CLAMP(number,minval,maxval) (number<minval?minval:(number>maxval?maxval:number))
110
#define GIM_GREATER(x, y) btFabs(x) > (y)
113
#define GIM_SWAP_NUMBERS(a,b){ \
119
#define GIM_INV_SQRT(va,isva)\
123
isva = G_REAL_INFINITY;\
127
GREAL _x = va * 0.5f;\
128
GUINT _y = 0x5f3759df - ( GIM_IR(va) >> 1);\
130
isva = isva * ( 1.5f - ( _x * isva * isva ) );\
134
#define GIM_SQRT(va,sva)\
136
GIM_INV_SQRT(va,sva);\
140
//! Computes 1.0f / sqrtf(x). Comes from Quake3. See http://www.magic-software.com/3DGEDInvSqrt.html
141
inline GREAL gim_inv_sqrt(GREAL f)
148
inline GREAL gim_sqrt(GREAL f)
157
#endif // GIM_MATH_H_INCLUDED