26 #ifndef WFMATH_QUATERNION_H
27 #define WFMATH_QUATERNION_H
29 #include <wfmath/vector.h>
30 #include <wfmath/rotmatrix.h>
40 Quaternion(
const Identity &) : m_w(1), m_vec(), m_valid(
true), m_age(0) {
44 Quaternion () : m_w(0), m_vec(), m_valid(false), m_age(0) {}
64 m_valid(false), m_age(0)
68 m_valid(p.m_valid), m_age(p.m_age) {}
70 explicit Quaternion (
const AtlasInType& a) : m_w(0), m_vec(),
71 m_valid(false), m_age(0)
76 friend std::ostream& operator<<(std::ostream& os,
const Quaternion& p);
77 friend std::istream& operator>>(std::istream& is,
Quaternion& p);
85 {m_w = rhs.m_w; m_vec = rhs.m_vec; m_valid = rhs.m_valid; m_age = rhs.m_age;
return *
this;}
89 bool isEqualTo(
const Quaternion &q,
CoordType epsilon = numeric_constants<CoordType>::epsilon())
const;
91 bool operator== (
const Quaternion& rhs)
const {
return isEqualTo(rhs);}
92 bool operator!= (
const Quaternion& rhs)
const {
return !isEqualTo(rhs);}
94 bool isValid()
const {
return m_valid;}
163 unsigned age()
const {
return m_age;}
166 Quaternion(
bool valid) : m_w(0), m_vec(), m_valid(valid), m_age(1) {}
167 void checkNormalization() {
if(m_age >= WFMATH_MAX_NORM_AGE && m_valid)
normalize();}
176 #endif // WFMATH_QUATERNION_H