Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/orxonox/branches/soundEngine/src/lib/math/vector.h @ 3542

Last change on this file since 3542 was 3473, checked in by patrick, 20 years ago

orxonox/trunk: redesigning directory structure - created mathlib and added all important classes

File size: 3.7 KB
Line 
1/*!
2    \file vector.h
3    \brief A basic 3D math framework
4   
5    Contains classes to handle vectors, lines, rotations and planes
6*/ 
7
8#ifndef _VECTOR_H
9#define _VECTOR_H
10
11#include <math.h>
12//! PI the circle-constant
13#define PI 3.14159265359f
14
15//! 3D Vector
16/**
17        Class to handle 3D Vectors
18*/
19class Vector {
20
21  public:
22 
23  float x; //!< The x Coordinate of the Vector.
24  float y; //!< The y Coordinate of the Vector.
25  float z; //!< The z Coordinate of the Vector.
26
27  Vector (float x, float y, float z) : x(x), y(y), z(z) {}  //!< assignment constructor
28  Vector () : x(0), y(0), z(0) {}
29  ~Vector () {}
30
31  Vector operator+ (const Vector& v) const;
32  Vector operator- (const Vector& v) const;
33  float operator* (const Vector& v) const;
34  Vector operator* (float f) const;
35  Vector operator/ (float f) const;
36  float dot (const Vector& v) const;
37  Vector cross (const Vector& v) const;
38  void scale(const Vector& v);
39  float len() const;
40  void normalize();
41  Vector* getNormalized();
42  Vector abs();
43};
44
45float angleDeg (const Vector& v1, const Vector& v2);
46float angleRad (const Vector& v1, const Vector& v2);
47
48//! Quaternion
49/**
50        Class to handle 3-dimensional rotation efficiently
51*/
52class Quaternion
53{
54 public:
55        Vector v;       //!< Imaginary Vector
56        float w;        //!< Real part of the number
57
58        Quaternion ();
59        Quaternion (float m[4][4]);
60        Quaternion (float angle, const Vector& axis);
61        Quaternion (const Vector& dir, const Vector& up);
62        Quaternion (float roll, float pitch, float yaw);
63       
64        Quaternion operator/ (const float& f) const;
65        Quaternion operator* (const float& f) const;
66        Quaternion operator* (const Quaternion& q) const;
67        Quaternion operator+ (const Quaternion& q) const;
68        Quaternion operator- (const Quaternion& q) const;
69        Quaternion conjugate () const;
70        Quaternion inverse () const;
71        Vector apply (Vector& f) const;
72        float norm () const;
73        void matrix (float m[4][4]) const;
74        void quatSlerp(const Quaternion* from, const Quaternion* to, const float t, Quaternion* res);
75
76 private:
77        float DELTA;      //!< resolution of calculation
78
79};
80
81//! 3D rotation (OBSOLETE)
82/**
83  Class to handle 3-dimensional rotations.
84  Can create a rotation from several inputs, currently stores rotation using a 3x3 Matrix
85*/
86class Rotation {
87  public:
88 
89  float m[9]; //!< 3x3 Rotation Matrix
90 
91  Rotation ( const Vector& v);
92  Rotation ( const Vector& axis, float angle);
93  Rotation ( float pitch, float yaw, float roll);
94  Rotation ();
95  ~Rotation () {}
96 
97  Rotation operator* (const Rotation& r);
98 
99  void glmatrix (float* buffer);
100};
101
102//!< Apply a rotation to a vector
103Vector rotateVector( const Vector& v, const Rotation& r);
104
105//! 3D line
106/**
107  Class to store Lines in 3-dimensional space
108
109  Supports line-to-line distance measurements and rotation
110*/
111class Line
112{
113  public:
114 
115  Vector r;   //!< Offset
116  Vector a;   //!< Direction
117 
118  Line ( Vector r, Vector a) : r(r), a(a) {}  //!< assignment constructor
119  Line () : r(Vector(0,0,0)), a(Vector (1,1,1)) {}
120  ~Line () {}
121 
122  float distance (const Line& l) const;
123  float distancePoint (const Vector& v) const;
124  Vector* footpoints (const Line& l) const;
125  float len () const;
126 
127  void rotate(const Rotation& rot);
128};
129
130//! 3D plane
131/**
132  Class to handle planes in 3-dimensional space
133 
134  Critical for polygon-based collision detection
135*/
136class Plane
137{
138  public:
139 
140  Vector n;   //!< Normal vector
141  float k;    //!< Offset constant
142 
143  Plane (Vector a, Vector b, Vector c);
144  Plane (Vector norm, Vector p);
145  Plane (Vector n, float k) : n(n), k(k) {} //!< assignment constructor
146  Plane () : n(Vector(1,1,1)), k(0) {}
147  ~Plane () {}
148 
149  Vector intersectLine (const Line& l) const;
150  float distancePoint (const Vector& p) const;
151  float locatePoint (const Vector& p) const;
152};
153
154#endif /* _VECTOR_H */
Note: See TracBrowser for help on using the repository browser.