quaternion.h

Go to the documentation of this file.
00001 
00014 #ifndef _DLR_QUATERNION_H_
00015 #define _DLR_QUATERNION_H_
00016 
00017 namespace dlr {
00018 
00019   namespace numeric {
00020     
00033     class Quaternion {
00034     public:
00035 
00040       Quaternion() 
00041         : m_s(1.0), m_i(0.0), m_j(0.0), m_k(0.0), m_isNormalized(true) {}
00042 
00063       Quaternion(double s, double i, double j, double k,
00064                  bool isNormalized=false) 
00065         : m_s(s), m_i(i), m_j(j), m_k(k), m_isNormalized(isNormalized) {}
00066 
00073       Quaternion(const Quaternion &source) :
00074         m_s(source.m_s), m_i(source.m_i), m_j(source.m_j), m_k(source.m_k),
00075         m_isNormalized(source.m_isNormalized) {}
00076 
00080       virtual
00081       inline
00082       ~Quaternion() {}
00083 
00091       inline
00092       double
00093       s() const { return m_s; };
00094 
00102       inline
00103       double
00104       i() const { return m_i; };
00105 
00113       inline
00114       double
00115       j() const { return m_j; };
00116 
00124       inline
00125       double
00126       k() const { return m_k; };
00127 
00144       inline
00145       void
00146       setValue(double s, double i, double j, double k) {
00147         m_s = s; m_i = i; m_j = j; m_k = k; m_isNormalized = false;
00148       }
00149 
00157       void
00158       normalize();
00159 
00167       inline
00168       Quaternion&
00169       operator=(const Quaternion &source) {
00170         setValue(source.m_s, source.m_i, source.m_j, source.m_k);
00171         m_isNormalized = source.m_isNormalized;
00172         return *this;
00173       }
00174     
00175     private:
00176       // Components of the quaternion are listed in order.
00177       double m_s;
00178       double m_i;
00179       double m_j;
00180       double m_k;
00181 
00182       // A flag to avoid repeatedly re-normalizing.
00183       bool m_isNormalized;
00184     };
00185 
00186     /* ======================= Non-member functions ===================== */
00187 
00202     inline
00203     Quaternion
00204     conjugate(const Quaternion& source) {
00205       return Quaternion(source.s(), -(source.i()), -(source.j()), -(source.k()));
00206     }
00207   
00208   } // namespace numeric
00209 
00210 } // namespace dlr
00211 
00212 
00213 /* ======= Declarations to maintain compatibility with legacy code. ======= */
00214 
00215 namespace dlr {
00216 
00217   using numeric::Quaternion;
00218 
00219 } // namespace dlr
00220 
00221 #endif // #ifndef _DLR_QUATERNION_H_

Generated on Mon Jul 9 20:34:03 2007 for dlrLibs Utility Libraries by  doxygen 1.5.2