Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/network/src/util/Math.h @ 1494

Last change on this file since 1494 was 1494, checked in by rgrieder, 16 years ago
  • set the svn:eol-style property to all files so, that where ever you check out, you'll get the right line endings (had to change every file with mixed endings to windows in order to set the property)
  • Property svn:eol-style set to native
File size: 3.6 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
7 *
8 *   This program is free software; you can redistribute it and/or
9 *   modify it under the terms of the GNU General Public License
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      Fabian 'x3n' Landau
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29#ifndef _Util_Math_H__
30#define _Util_Math_H__
31
32#include "UtilPrereqs.h"
33
34#include <ostream>
35
36#include <OgreMath.h>
37#include <OgreVector2.h>
38#include <OgreVector3.h>
39#include <OgreVector4.h>
40#include <OgreMatrix3.h>
41#include <OgreQuaternion.h>
42#include <OgreColourValue.h>
43
44namespace orxonox
45{
46  typedef Ogre::Radian Radian;
47  typedef Ogre::Degree Degree;
48  typedef Ogre::Vector2 Vector2;
49  typedef Ogre::Vector3 Vector3;
50  typedef Ogre::Vector4 Vector4;
51  typedef Ogre::Matrix3 Matrix3;
52  typedef Ogre::Quaternion Quaternion;
53  typedef Ogre::ColourValue ColourValue;
54}
55
56_UtilExport std::ostream& operator<<(std::ostream& out, const orxonox::Radian& radian);
57_UtilExport std::istream& operator>>(std::istream& in, orxonox::Radian& radian);
58_UtilExport std::ostream& operator<<(std::ostream& out, const orxonox::Degree& degree);
59_UtilExport std::istream& operator>>(std::istream& in, orxonox::Degree& degree);
60
61template <typename T>
62inline T sgn(T x)
63{
64    return (x >= 0) ? 1 : -1;
65}
66
67template <typename T>
68inline T min(T a, T b)
69{
70    return (a <= b) ? a : b;
71}
72
73template <typename T>
74inline T max(T a, T b)
75{
76    return (a >= b) ? a : b;
77}
78
79template <typename T>
80inline T clamp(T x, T min, T max)
81{
82    if (x < min)
83        return min;
84
85    if (x > max)
86        return max;
87
88    return x;
89}
90
91template <typename T>
92inline T square(T x)
93{
94    return x*x;
95}
96
97template <typename T>
98inline T cube(T x)
99{
100    return x*x*x;
101}
102
103template <typename T>
104inline int floor(T x)
105{
106    return (int)(x);
107}
108
109template <typename T>
110inline int ceil(T x)
111{
112    int temp = floor(x);
113    return (temp != x) ? (temp + 1) : temp;
114}
115
116template <typename T>
117inline int round(T x)
118{
119    return (int)(x + 0.5);
120}
121
122template <typename T>
123inline int mod(T x, int max)
124{
125    if (x >= 0)
126        return (x % max);
127    else
128        return ((x % max) + max);
129}
130
131template <typename T>
132T interpolate(float time, const T& start, const T& end)
133{
134    return time * (end - start) + start;
135}
136
137template <typename T>
138T interpolateSmooth(float time, const T& start, const T& end)
139{
140    return (-2 * (end - start) * cube(time)) + (3 * (end - start) * square(time)) + start;
141}
142
143inline _UtilExport float rnd()
144{
145    return ((float)rand() / RAND_MAX);
146}
147
148inline _UtilExport float rnd(float max)
149{
150    return rnd() * max;
151}
152
153inline _UtilExport float rnd(float min, float max)
154{
155    return rnd(max - min) + min;
156}
157
158class _UtilExport IntVector2
159{
160public:
161  IntVector2() : x(0), y(0) { }
162  IntVector2(int _x, int _y) : x(_x), y(_y) { }
163  int x;
164  int y;
165};
166
167class _UtilExport IntVector3
168{
169public:
170  IntVector3() : x(0), y(0), z(0) { }
171  IntVector3(int _x, int _y, int _z) : x(_x), y(_y), z(_z) { }
172  int x;
173  int y;
174  int z;
175};
176
177#endif /* _Util_Math_H__ */
Note: See TracBrowser for help on using the repository browser.