Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

Quaternion.h

00001 /*************************************************************************** 00002 * This file is part of OpenCAL: Open Computer Animation Library * 00003 * I created OpenCAL as my master's thesis Computer Science (multimedia) * 00004 * at the tUL university in Diepenbeek, Belgium * 00005 * * 00006 * Copyright (C) 2003-2004 by Jeroen Dierckx * 00007 * jeroen.dierckx@student.luc.ac.be * 00008 * * 00009 ***************************************************************************/ 00010 00011 #ifndef OPENCAL_UTILS_QUATERNION_H 00012 #define OPENCAL_UTILS_QUATERNION_H 00013 00014 // Includes 00015 #include <OpenCAL/global.h> 00016 #include <OpenCAL/Vector3.h> 00017 #include <OpenCAL/Matrix33.h> 00018 00019 namespace OpenCAL 00020 { 00021 namespace Utils 00022 { 00027 class OPENCAL_API Quaternion 00028 { 00029 protected: 00030 // Member variables 00031 float m_scalar; 00032 Vector3 m_vector; 00033 00034 public: 00035 // Static member variables 00036 static const Quaternion identity; 00037 00038 public: 00039 // Constructors and destructor 00040 Quaternion(); 00041 Quaternion(float scalar, const Vector3 &vector); 00042 virtual ~Quaternion(); 00043 00044 // Get functions 00045 float getScalar() const { return m_scalar; } 00046 const Vector3 &getVector() const { return m_vector; } 00047 00048 // Set functions 00049 void setScalar(float scalar) { m_scalar = scalar; } 00050 void setVector(const Vector3 &vector) { m_vector = vector; } 00051 00052 // Operator functions 00053 Quaternion operator+(const Quaternion &q) const; 00054 Quaternion operator-(const Quaternion &q) const; 00055 Quaternion operator*(const Quaternion &q) const; 00056 Quaternion operator*(const Vector3 &v) const; 00057 Quaternion operator*(float factor) const; 00058 Quaternion operator/(float factor) const; 00059 00060 void operator+=(const Quaternion &q); 00061 void operator-=(const Quaternion &q); 00062 void operator*=(const Quaternion &q); 00063 void operator*=(const Vector3 &v); 00064 void operator*=(float factor); 00065 void operator/=(float factor); 00066 00067 Quaternion operator-() const; 00068 00069 bool operator==(const Quaternion &q) const; 00070 bool operator!=(const Quaternion &q) const; 00071 00072 // Cast operators 00073 operator Matrix33() const { return toMatrix33(); } 00074 00075 // Magnitude 00076 float magnitude() const; 00077 float magnitudeSquared() const; 00078 00079 // Inverse 00080 void inverse(); 00081 Quaternion inversed() const; 00082 void inversed(Quaternion *q) const; 00083 00084 // Normalization 00085 void normalize(); 00086 Quaternion normalized() const; 00087 void normalized(Quaternion *q) const; 00088 00089 // Dot product 00090 float dotProduct(const Quaternion &q) const; 00091 00092 // Slerp (linear interpolation between unit quaternions) 00093 void slerp(float u, const Quaternion &dest) { slerp(u, *this, dest); } 00094 void slerp(float u, const Quaternion &source, const Quaternion &dest) { *this = slerped(u, source, dest); } 00095 Quaternion slerped(float u, const Quaternion &dest) const { return slerped(u, *this, dest); } 00096 Quaternion slerped(float u, const Quaternion &source, const Quaternion &dest) const; 00097 00098 Quaternion blended(float u, const Quaternion &dest) const { return slerped(u, dest); } 00099 00100 // Axis - Angle rotation 00101 static Quaternion createFromAxisAngle(const Vector3 &axis, float degrees); 00102 void fromAxisAngle(const Vector3 &axis, float degrees); 00103 void toAxisAngle(Vector3 *axis, float *degrees) const; 00104 00105 // Euler angle rotation 00106 void fromEulerAngle(float rotX, float rotY, float rotZ); 00107 void fromEulerAngle(const Vector3 &rot); 00108 Vector3 toEulerAngle() const; 00109 void toEulerAngle(float *rotX, float *rotY, float *rotZ) const; 00110 void toEulerAngle(Vector3 *rot) const; 00111 00112 // Matrix rotation 00113 void fromMatrix33(const Matrix33 &matrix); 00114 Matrix33 toMatrix33() const; 00115 void toMatrix33(Matrix33 *matrix) const; 00116 00117 // Other functions 00118 void print() const; 00119 00120 // Friend functions 00121 friend Quaternion operator*(const Vector3 &v, const Quaternion &q); 00122 friend Quaternion operator*(float factor, const Quaternion &q); 00123 friend Quaternion operator/(float factor, const Quaternion &q); 00124 friend std::ostream &operator<<(std::ostream &stream, const Quaternion &q); 00125 }; 00126 } 00127 } 00128 00129 #endif // OPENCAL_UTILS_QUATERNION_H

Generated on Sun Aug 15 19:19:23 2004 for OpenCAL: Open Computer Animation Library by doxygen 1.3.8