Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/physics/src/bullet/BulletCollision/Gimpact/gim_math.h @ 1963

Last change on this file since 1963 was 1963, checked in by rgrieder, 16 years ago

Added Bullet physics engine.

  • Property svn:eol-style set to native
File size: 4.2 KB
Line 
1#ifndef GIM_MATH_H_INCLUDED
2#define GIM_MATH_H_INCLUDED
3/*! \file gim_math.h
4\author Francisco Len Nßjera
5*/
6/*
7-----------------------------------------------------------------------------
8This source file is part of GIMPACT Library.
9
10For the latest info, see http://gimpact.sourceforge.net/
11
12Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
13email: 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/*! \defgroup BASIC_TYPES
39Basic types and constants
40Conventions:
41Types starting with G
42Constants starting with G_
43*/
44//! @{
45
46#define GREAL btScalar
47#define GREAL2 double
48#define GINT int
49#define GUINT unsigned int
50#define GSHORT short
51#define GUSHORT unsigned short
52#define GINT64 long long
53#define GUINT64 unsigned long long
54
55//! @}
56
57/*! \defgroup BASIC_CONSTANTS
58Basic constants
59Conventions:
60Types starting with G
61Constants starting with G_
62*/
63//! @{
64
65#define G_PI 3.14159265358979f
66#define G_HALF_PI 1.5707963f
67//267948966
68#define G_TWO_PI 6.28318530f
69//71795864
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
76//! @}
77
78
79/*! \defgroup SCALAR_TYPES
80\brief
81Precision type constants
82*/
83//! @{
84enum GIM_SCALAR_TYPES
85{
86        G_STYPE_REAL =0,
87        G_STYPE_REAL2,
88        G_STYPE_SHORT,
89        G_STYPE_USHORT,
90        G_STYPE_INT,
91        G_STYPE_UINT,
92        G_STYPE_INT64,
93        G_STYPE_UINT64
94};
95//! @}
96
97/*! \defgroup MATH_FUNCTIONS
98mathematical functions
99*/
100//! @{
101
102#define G_DEGTORAD(X) ((X)*3.1415926f/180.0f)
103#define G_RADTODEG(X) ((X)*180.0f/3.1415926f)
104
105//! Integer representation of a floating-point value.
106#define GIM_IR(x)                                       ((GUINT&)(x))
107
108//! Signed integer representation of a floating-point value.
109#define GIM_SIR(x)                                      ((GINT&)(x))
110
111//! Absolute integer representation of a floating-point value
112#define GIM_AIR(x)                                      (GIM_IR(x)&0x7fffffff)
113
114//! Floating-point representation of an integer value.
115#define GIM_FR(x)                                       ((GREAL&)(x))
116
117#define GIM_MAX(a,b) (a<b?b:a)
118#define GIM_MIN(a,b) (a>b?b:a)
119
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))
122
123#define GIM_IS_ZERO(value) (value < G_EPSILON &&  value > -G_EPSILON)
124
125#define GIM_IS_NEGATIVE(value) (value <= -G_EPSILON)
126
127#define GIM_IS_POSISITVE(value) (value >= G_EPSILON)
128
129#define GIM_NEAR_EQUAL(v1,v2) GIM_IS_ZERO((v1-v2))
130
131///returns a clamped number
132#define GIM_CLAMP(number,minval,maxval) (number<minval?minval:(number>maxval?maxval:number))
133
134#define GIM_GREATER(x, y)       fabsf(x) > (y)
135
136///Swap numbers
137#define GIM_SWAP_NUMBERS(a,b){ \
138    a = a+b; \
139    b = a-b; \
140    a = a-b; \
141}\
142
143#define GIM_INV_SQRT(va,isva)\
144{\
145    if(va<=0.0000001f)\
146    {\
147        isva = G_REAL_INFINITY;\
148    }\
149    else\
150    {\
151        GREAL _x = va * 0.5f;\
152        GUINT _y = 0x5f3759df - ( GIM_IR(va) >> 1);\
153        isva = GIM_FR(_y);\
154        isva  = isva * ( 1.5f - ( _x * isva * isva ) );\
155    }\
156}\
157
158#define GIM_SQRT(va,sva)\
159{\
160    GIM_INV_SQRT(va,sva);\
161    sva = 1.0f/sva;\
162}\
163
164//! Computes 1.0f / sqrtf(x). Comes from Quake3. See http://www.magic-software.com/3DGEDInvSqrt.html
165inline GREAL gim_inv_sqrt(GREAL f)
166{
167    GREAL r;
168    GIM_INV_SQRT(f,r);
169    return r;
170}
171
172inline GREAL gim_sqrt(GREAL f)
173{
174    GREAL r;
175    GIM_SQRT(f,r);
176    return r;
177}
178
179//! @}
180
181#endif // GIM_MATH_H_INCLUDED
Note: See TracBrowser for help on using the repository browser.