ESyS-Particle  2.3.4
Quaternion.h
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2017 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.apache.org/licenses/LICENSE-2.0 //
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;
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
Quaternion::set_vector
QUATERNION_INLINE void set_vector(const Vec3 &v)
Definition: Quaternion.h:83
Quaternion::scalar
double scalar
Definition: Quaternion.h:33
Quaternion::operator+
QUATERNION_INLINE Quaternion operator+(const Quaternion &) const
Definition: Quaternion.hpp:129
Quaternion::return_sca
QUATERNION_INLINE double return_sca() const
Definition: Quaternion.h:81
esys::lsm::bpu::len
int len(const boost::python::object &pyOb)
Definition: Util.h:30
Quaternion::length
QUATERNION_INLINE double length() const
Definition: Quaternion.hpp:267
Quaternion::operator*
QUATERNION_INLINE friend Quaternion operator*(double, const Quaternion &)
Definition: Quaternion.hpp:162
dot
VEC3_INLINE double dot(const Vec3 &v1, const Vec3 &v2)
Definition: vec3.hpp:196
Quaternion::operator+=
QUATERNION_INLINE Quaternion & operator+=(const Quaternion &)
Definition: Quaternion.hpp:207
Quaternion::operator-
QUATERNION_INLINE Quaternion operator-() const
Definition: Quaternion.hpp:151
Quaternion::asAngleAxis
QUATERNION_INLINE Vec3 asAngleAxis() const
Definition: Quaternion.hpp:311
Quaternion::set_scalar
QUATERNION_INLINE void set_scalar(double d)
Definition: Quaternion.h:84
Quaternion::operator!=
QUATERNION_INLINE bool operator!=(const Quaternion &) const
Definition: Quaternion.hpp:116
Quaternion::operator/
QUATERNION_INLINE Quaternion operator/(const Quaternion &) const
Definition: Quaternion.hpp:202
Quaternion::operator/=
QUATERNION_INLINE Quaternion & operator/=(const Quaternion &)
Definition: Quaternion.hpp:242
Quaternion::operator*=
QUATERNION_INLINE Quaternion & operator*=(double)
Definition: Quaternion.hpp:223
QUATERNION_INLINE
#define QUATERNION_INLINE
Definition: Quaternion.h:19
cross
VEC3_INLINE Vec3 cross(const Vec3 &lhs, const Vec3 &rhs)
Definition: vec3.hpp:187
Quaternion::normalize
QUATERNION_INLINE void normalize()
Definition: Quaternion.hpp:256
esys::lsm::operator<<
std::ostream & operator<<(std::ostream &oStream, const SimpleConnectionData &connectionData)
Definition: GeometryReader.cpp:134
operator*
MATRIX3_INLINE Matrix3 operator*(double d, const Matrix3 &M)
Definition: Matrix3.hpp:311
operator>>
QUATERNION_INLINE std::istream & operator>>(std::istream &, Quaternion &)
Definition: Quaternion.hpp:83
Quaternion::operator==
QUATERNION_INLINE bool operator==(const Quaternion &) const
Definition: Quaternion.hpp:106
Quaternion::to_matrix
QUATERNION_INLINE Matrix3 to_matrix() const
Definition: Quaternion.hpp:273
Quaternion.h
Quaternion::inverse
QUATERNION_INLINE Quaternion inverse() const
Definition: Quaternion.hpp:197
Quaternion::Quaternion
QUATERNION_INLINE Quaternion()
Definition: Quaternion.hpp:33
Quaternion::AngleAxisPair
std::pair< double, Vec3 > AngleAxisPair
Definition: Quaternion.h:96
Quaternion
Definition: Quaternion.h:30
Vec3
Definition: vec3.h:47
operator<<
QUATERNION_INLINE std::ostream & operator<<(std::ostream &, const Quaternion &)
Definition: Quaternion.hpp:78
Quaternion::operator-=
QUATERNION_INLINE Quaternion & operator-=(const Quaternion &)
Definition: Quaternion.hpp:215
Quaternion::vector
Vec3 vector
Definition: Quaternion.h:32
vec3.h
Quaternion::output
QUATERNION_INLINE std::ostream & output(std::ostream &) const
Definition: Quaternion.hpp:88
Matrix3
3x3 Matrix
Definition: Matrix3.h:48
Quaternion::operator=
QUATERNION_INLINE Quaternion & operator=(const Quaternion &)
Definition: Quaternion.hpp:59
Quaternion::~Quaternion
QUATERNION_INLINE ~Quaternion()
Definition: Quaternion.h:44
Quaternion::return_vec
QUATERNION_INLINE Vec3 return_vec() const
Definition: Quaternion.h:80
Quaternion.hpp
esys::lsm::operator>>
std::istream & operator>>(std::istream &iStream, SimpleConnectionData &connectionData)
Definition: GeometryReader.cpp:128
Quaternion::asAngleAxisPair
QUATERNION_INLINE AngleAxisPair asAngleAxisPair() const
Definition: Quaternion.hpp:317
Quaternion::input
QUATERNION_INLINE std::istream & input(std::istream &ci)
Definition: Quaternion.hpp:97