25 Quat2(
const double &a): ang_(a) { }
31 void setQuat(
const double &a){ ang_ = a; }
34 const double &
ang()
const {
return ang_; }
37 double &
rang() {
return ang_; }
106 Quat3(): w_(0), i_(0), j_(0), k_(0) { }
109 Quat3(
const double &w1,
const double &x,
const double &y,
const double &z) { w_ = w1; i_ = x; j_ = y; k_ = z; }
113 Quat3(
const Quat3 &q) { w_ = q.w_; i_ = q.i_; j_ = q.j_; k_ = q.k_; }
115 void setQuat(
const double &w1,
const double &x,
const double &y,
const double &z){ w_ = w1; i_ = x; j_ = y; k_ = z; }
118 const double &
w()
const {
return w_; }
120 const double &
i()
const {
return i_; }
122 const double &
j()
const {
return j_; }
124 const double &
k()
const {
return k_; }
127 double &
rw() {
return w_; }
129 double &
ri() {
return i_; }
131 double &
rj() {
return j_; }
133 double &
rk() {
return k_; }
136 void reset() { w_=0.0; i_=0.0; j_=0.0; k_=0.0; }
138 void ident() { w_=1.0; i_=0.0; j_=0.0; k_=0.0; }
142 BASE_EXPORT bool isNull()
const {
return (abs(w_) > std::numeric_limits<double>::epsilon() || abs(i_) > std::numeric_limits<double>::epsilon() || abs(j_) > std::numeric_limits<double>::epsilon() || abs(k_) > std::numeric_limits<double>::epsilon()) ? false :
true; }
184 void conj() { i_=-i_; j_=-j_; k_=-k_; }
197 Quat3 operator *(
const Quat3 &v)
const {
Quat3 q(w_*v.w_-i_*v.i_-j_*v.j_-k_*v.k_,w_*v.i_+i_*v.w_+j_*v.k_-k_*v.j_,w_*v.j_-i_*v.k_+j_*v.w_+k_*v.i_,w_*v.k_+i_*v.j_-j_*v.i_+k_*v.w_);
return q; }
206 const Quat3 &
operator *=(
const double &d) { w_ *= d; i_ *= d; j_ *= d; k_ *= d;
return *
this; }
208 const Quat3 &
operator /=(
const double &d) { w_ /= d; i_ /= d; j_ /= d; k_ /= d;
return *
this; }
211 double ti(w_*v.i_+i_*v.w_+j_*v.k_-k_*v.j_);
212 double tj(w_*v.j_-i_*v.k_+j_*v.w_+k_*v.i_);
213 double tk(w_*v.k_+i_*v.j_-j_*v.i_+k_*v.w_);
218 w_ = tw; i_ = ti; j_ = tj; k_ = tk;
223 bool operator ==(
const Quat3 &v)
const {
return (w_ == v.w_ && i_==v.i_ && j_==v.j_ && k_==v.k_); }
const Quat3 & operator+=(const Quat3 &v)
In place addition of two quaternions.
Definition: quat.h:221
BASE_EXPORT void spinAboutY(const double &)
Just spin about the Y axis.
Definition: quat.cpp:204
BASE_EXPORT DVect3 rotate(const DVect3 &v) const
Rotate a DVect3 by the quaternian to get a new DVect3.
Definition: quat.cpp:212
2D quaternion-like utility class. In this case only the angle (in radians) is stored as opposed to th...
Definition: quat.h:20
Quat2(const Quat2 &q)
Copy constructor.
Definition: quat.h:29
BASE_EXPORT DMatrix< 3, 3 > quatToMatrix() const
Convert the quaternion to a rotation matrix.
Definition: quat.cpp:70
Quat2 operator/(const double &d) const
Division by a double.
Definition: quat.h:75
const Quat2 & operator *=(const double &d)
In place multiplaction by a double.
Definition: quat.h:85
const Quat2 & operator/=(const double &d)
In place division by a double.
Definition: quat.h:87
friend Quat3 operator *(const double &d, const Quat3 &p2)
Product of a double and a quaternion.
Definition: quat.h:195
DMatrix is a Matrix that defaults to type double...
Definition: matrix.h:719
Quat3 operator *(const Quat3 &v) const
Product of two quaternions.
Definition: quat.h:197
Quat3 friend operator *(const DVect3 &v, const Quat3 &q)
DVect3 times a quaternion, in that order.
Definition: quat.h:201
double & rang()
Access a reference to the angle.
Definition: quat.h:37
BASE_EXPORT void spinAboutZ(const double &)
Just spin about the Z axis.
Definition: quat.cpp:208
static BASE_EXPORT Quat3 identity()
Returns the identity quaternion.
Definition: quat.h:140
const Quat3 & operator *=(const double &d)
In place multiplaction by a double.
Definition: quat.h:206
BASE_EXPORT void increment(const DAVect2 &)
Increment the quaternion due to a rotation about Z by the DAVect.
Definition: quat.cpp:66
BASE_EXPORT void fromUnitAxes(const DVect3 &, const DVect3 &)
Take 2 orthogonal axis for an axis system and convert to a quaternion.
Definition: quat.cpp:218
Quat3(const Quat3 &q)
Copy constructor.
Definition: quat.h:113
2D and 3D vector utility classes.
const double & k() const
Access the third imaginary part.
Definition: quat.h:124
const Quat2 & operator *=(const Quat2 &v)
Definition: quat.h:90
double & rk()
Access a reference to the third imaginary part.
Definition: quat.h:133
BASE_EXPORT void normalize()
Normalize the quaternion.
Definition: quat.h:188
const double & ang() const
Access the angle.
Definition: quat.h:34
BASE_EXPORT DVect3 e3() const
Get component e3 of the rotation matrix.
Definition: quat.cpp:260
BASE_EXPORT void fromUnitAxes(const DVect2 &, const DVect2 &)
Definition: quat.cpp:62
BASE_EXPORT DVect3 quatToAAngle() const
Convert to Axis Angle where the magnitude of the axis is the angle in radians.
Definition: quat.cpp:98
Quat2 operator *(const Quat2 &v) const
Definition: quat.h:80
void ident()
Reset the quaternion to the identity.
Definition: quat.h:138
void conj()
Convert to the conjugate quaternion - rotation by the opposite sign.
Definition: quat.h:68
Quat3 operator/(const double &d) const
Division by a double.
Definition: quat.h:193
~Quat3()
Default destructor.
Definition: quat.h:111
Quat2()
Default constructor.
Definition: quat.h:23
Quat3 operator+(const Quat3 &v) const
Addition of two quaternions.
Definition: quat.h:199
BASE_EXPORT void incrementAxisAngle(const DVect3 &, const double &)
Increment by this rotation.
Definition: quat.cpp:194
#define BASE_EXPORT
Definition: basedef.h:21
const Quat3 & operator/=(const double &d)
In place division by a double.
Definition: quat.h:208
BASE_EXPORT void incrementAxisAngle(const DVect2 &, const double &)
Increment by this rotation. In this case the axis is ignored.
Definition: quat.cpp:49
void setQuat(const double &w1, const double &x, const double &y, const double &z)
Set the real and imaginary parts.
Definition: quat.h:115
BASE_EXPORT DVect3 real() const
Return the "real" vector part of the quaternian.
Definition: quat.h:167
A template-based matrix class, size fixed at compile time.
Quat2 operator *(const double &d) const
Multiplication by a double.
Definition: quat.h:73
BASE_EXPORT void spinAboutZ(const double &)
Just spin about the Z axis.
Definition: quat.cpp:53
double & ri()
Access a reference to the first imaginary part.
Definition: quat.h:129
friend Quat2 operator *(const double &d, const Quat2 &p2)
Multiplication of a double times a quaternion.
Definition: quat.h:77
const Quat2 & operator+=(const Quat2 &v)
Definition: quat.h:93
void ident()
Reset to the identity.
Definition: quat.h:42
Quat2(const double &a)
Constructor initializing the angle.
Definition: quat.h:25
BASE_EXPORT void fromMatrix(const DMatrix< 2, 2 > &)
Convert a matrix into a quaternion.
Definition: quat.cpp:21
BASE_EXPORT DMatrix< 2, 2 > quatToMatrix() const
Convert the quaternion to a rotation matrix.
Definition: quat.cpp:6
void conj()
Convert the quaternion to the conjugate.
Definition: quat.h:184
void reset()
Reset the angle to 0.
Definition: quat.h:40
BASE_EXPORT DVect3 e1() const
Get component e1 of the rotation matrix.
Definition: quat.cpp:252
BASE_EXPORT void increment(const DAVect3 &)
Increment the quaternion due to a rotation about the x, y, and z axes by the DAVect.
Definition: quat.cpp:248
void setQuat(const double &a)
Set the angle.
Definition: quat.h:31
Quat3 operator *(const DVect3 &v) const
Quaternion times a DVect3, in that order.
Definition: quat.h:203
Quat2 operator+(const Quat2 &v) const
Addition of quaterions. This is also the composition of rotations in 2D.
Definition: quat.h:82
Quat3(const double &w1, const double &x, const double &y, const double &z)
Definition: quat.h:109
bool operator==(const Quat2 &v) const
Euality operator.
Definition: quat.h:95
Quat3()
Default constructor.
Definition: quat.h:106
BASE_EXPORT void fromEuler(const DVect3 &)
Definition: quat.cpp:173
const double & i() const
Access the first imaginary part.
Definition: quat.h:120
BASE_EXPORT void fromAxisAngle(const DVect2 &, const double &)
Definition: quat.cpp:45
static BASE_EXPORT Quat2 fromVect(const DVect2 &v)
Convert a DVect2 into a quaternion. This assumes a rotation from the positive x axis.
Definition: quat.cpp:17
BASE_EXPORT void spinAboutX(const double &)
Just spin about the X axis.
Definition: quat.cpp:200
Quat3 operator *(const double &d) const
Multiplication by a double.
Definition: quat.h:191
double & rj()
Access a reference to the second imaginary part.
Definition: quat.h:131
Quat3 getConj() const
Return the conjugate of the quaternion.
Definition: quat.h:186
BASE_EXPORT bool isNull() const
Returns a boolean indicating whether or not the quaternion is null.
Definition: quat.h:142
const double & j() const
Access the second imaginary part.
Definition: quat.h:122
3D quaternion utility class.
Definition: quat.h:103
void reset()
Reset the quaternion.
Definition: quat.h:136
double & rw()
Access a reference to the real part.
Definition: quat.h:127
~Quat2()
Destructor.
Definition: quat.h:27
static BASE_EXPORT Quat3 fromVect(const DVect3 &v)
Convert a DVect3 into a quaternion.
Definition: quat.cpp:119
Quat2 getConj() const
Return the conjugate of the quaternion.
Definition: quat.h:70
const Quat3 & operator *=(const Quat3 &v)
In place multiplication of two quaternions.
Definition: quat.h:210
BASE_EXPORT DVect3 e2() const
Get component e2 of the rotation matrix.
Definition: quat.cpp:256
const double & w() const
Access the real part.
Definition: quat.h:118
bool operator==(const Quat3 &v) const
Euality operator.
Definition: quat.h:223
BASE_EXPORT void fromMatrix(const DMatrix< 3, 3 > &)
Convert a matrix into a quaternion.
Definition: quat.cpp:128
BASE_EXPORT void fromAxisAngle(const DVect3 &, const double &)
Take an axis-angle representation and convert it to a quaternion where the angle is in radians.
Definition: quat.cpp:159
BASE_EXPORT DVect2 rotate(const DVect2 &v) const
Rotate a DVect2 by the quaternian to get a new DVect2.
Definition: quat.cpp:57
static BASE_EXPORT Quat2 identity()
Return the identity quaternion.
Definition: quat.h:44
BASE_EXPORT DVect3 quatToEuler() const
Definition: quat.cpp:264