Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/resource/src/bullet/BulletCollision/Gimpact/gim_math.h @ 3825

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

Update from Bullet 2.73 to 2.74.

  • Property svn:eol-style set to native
File size: 3.9 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
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 //!< A very very high value
58#define G_REAL_INFINITY FLT_MAX
59#define G_SIGN_BITMASK                  0x80000000
60#define G_EPSILON SIMD_EPSILON
61
62
63
64enum GIM_SCALAR_TYPES
65{
66        G_STYPE_REAL =0,
67        G_STYPE_REAL2,
68        G_STYPE_SHORT,
69        G_STYPE_USHORT,
70        G_STYPE_INT,
71        G_STYPE_UINT,
72        G_STYPE_INT64,
73        G_STYPE_UINT64
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
81//! Integer representation of a floating-point value.
82#define GIM_IR(x)                                       ((GUINT&)(x))
83
84//! Signed integer representation of a floating-point value.
85#define GIM_SIR(x)                                      ((GINT&)(x))
86
87//! Absolute integer representation of a floating-point value
88#define GIM_AIR(x)                                      (GIM_IR(x)&0x7fffffff)
89
90//! Floating-point representation of an integer value.
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
107///returns a clamped number
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
112///Swap numbers
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//! Computes 1.0f / sqrtf(x). Comes from Quake3. See http://www.magic-software.com/3DGEDInvSqrt.html
141inline GREAL gim_inv_sqrt(GREAL f)
142{
143    GREAL r;
144    GIM_INV_SQRT(f,r);
145    return r;
146}
147
148inline GREAL gim_sqrt(GREAL f)
149{
150    GREAL r;
151    GIM_SQRT(f,r);
152    return r;
153}
154
155
156
157#endif // GIM_MATH_H_INCLUDED
Note: See TracBrowser for help on using the repository browser.