ESyS-Particle  2.3
Quaternion.h
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2014 by The University of Queensland //
4 // Centre for Geoscience Computing //
5 // http://earth.uq.edu.au/centre-geoscience-computing //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.opensource.org/licenses/osl-3.0.php //
10 // //
12 
13 #ifndef _QUATERNION_H
14 #define _QUATERNION_H
15 
16 #define DO_INLINE_QUATERNION 1
17 
18 #if DO_INLINE_QUATERNION >= 1
19 #define QUATERNION_INLINE inline
20 #else
21 #define QUATERNION_INLINE
22 #endif
23 
24 #include <math.h>
25 #include "Foundation/vec3.h"
26 
27 class Matrix3;
28 
30 {
31 private:
33  double scalar;
34 
35 public:
36  // Constructors
38  QUATERNION_INLINE Quaternion(double, const Vec3 &);
39 
40  // Copy Constructor
42 
43  // Destructor
45 
46  // Assignment
48 
49  // Output
50  QUATERNION_INLINE std::ostream& output(std::ostream&) const;
51  QUATERNION_INLINE std::istream& input(std::istream& ci);
52 
53  // Math
54  QUATERNION_INLINE bool operator==(const Quaternion&) const;
55  QUATERNION_INLINE bool operator!=(const Quaternion&) const;
56 
60  QUATERNION_INLINE friend Quaternion operator*(double, const Quaternion&);
64 
70 
72 
74 
75  QUATERNION_INLINE double length() const;
76 
78 
79  // Access Functions
80  QUATERNION_INLINE Vec3 return_vec() const { return vector; };
81  QUATERNION_INLINE double return_sca() const { return scalar; };
82 
83  QUATERNION_INLINE void set_vector(const Vec3 &v) { vector = v; }
84  QUATERNION_INLINE void set_scalar(double d) { scalar = d; }
85 
92 
96  typedef std::pair<double,Vec3> AngleAxisPair;
102  QUATERNION_INLINE AngleAxisPair asAngleAxisPair() const;
103 };
104 
105 QUATERNION_INLINE std::ostream& operator<<(std::ostream&, const Quaternion &);
106 QUATERNION_INLINE std::istream& operator>>(std::istream&, Quaternion &);
107 
108 #if DO_INLINE_QUATERNION >= 1
109 #include "Foundation/Quaternion.hpp"
110 #endif
111 
112 #endif
Definition: Quaternion.h:29
std::pair< double, Vec3 > AngleAxisPair
Definition: Quaternion.h:96
QUATERNION_INLINE Quaternion & operator=(const Quaternion &)
Definition: Quaternion.hpp:59
QUATERNION_INLINE void set_scalar(double d)
Definition: Quaternion.h:84
Vec3 vector
Definition: Quaternion.h:32
QUATERNION_INLINE void normalize()
Definition: Quaternion.hpp:256
Definition: vec3.h:46
QUATERNION_INLINE ~Quaternion()
Definition: Quaternion.h:44
QUATERNION_INLINE Quaternion operator+(const Quaternion &) const
Definition: Quaternion.hpp:129
QUATERNION_INLINE AngleAxisPair asAngleAxisPair() const
Definition: Quaternion.hpp:317
QUATERNION_INLINE Quaternion operator/(const Quaternion &) const
Definition: Quaternion.hpp:202
3x3 Matrix
Definition: Matrix3.h:47
#define QUATERNION_INLINE
Definition: Quaternion.h:19
QUATERNION_INLINE Quaternion operator-() const
Definition: Quaternion.hpp:151
QUATERNION_INLINE Quaternion & operator-=(const Quaternion &)
Definition: Quaternion.hpp:215
double scalar
Definition: Quaternion.h:33
QUATERNION_INLINE std::ostream & operator<<(std::ostream &, const Quaternion &)
Definition: Quaternion.hpp:78
QUATERNION_INLINE bool operator!=(const Quaternion &) const
Definition: Quaternion.hpp:116
QUATERNION_INLINE std::ostream & output(std::ostream &) const
Definition: Quaternion.hpp:88
QUATERNION_INLINE std::istream & operator>>(std::istream &, Quaternion &)
Definition: Quaternion.hpp:83
QUATERNION_INLINE double length() const
Definition: Quaternion.hpp:267
QUATERNION_INLINE Vec3 return_vec() const
Definition: Quaternion.h:80
QUATERNION_INLINE Matrix3 to_matrix() const
Definition: Quaternion.hpp:273
QUATERNION_INLINE double return_sca() const
Definition: Quaternion.h:81
QUATERNION_INLINE Quaternion & operator/=(const Quaternion &)
Definition: Quaternion.hpp:242
QUATERNION_INLINE Quaternion & operator+=(const Quaternion &)
Definition: Quaternion.hpp:207
QUATERNION_INLINE Quaternion inverse() const
Definition: Quaternion.hpp:197
QUATERNION_INLINE void set_vector(const Vec3 &v)
Definition: Quaternion.h:83
QUATERNION_INLINE Quaternion & operator*=(double)
Definition: Quaternion.hpp:223
QUATERNION_INLINE std::istream & input(std::istream &ci)
Definition: Quaternion.hpp:97
QUATERNION_INLINE Vec3 asAngleAxis() const
Definition: Quaternion.hpp:311
QUATERNION_INLINE Quaternion()
Definition: Quaternion.hpp:33
QUATERNION_INLINE bool operator==(const Quaternion &) const
Definition: Quaternion.hpp:106
QUATERNION_INLINE friend Quaternion operator*(double, const Quaternion &)
Definition: Quaternion.hpp:162