Crazy Eddie's GUI System
0.8.7
|
29 #ifndef _CEGUIQuaternion_h_
30 #define _CEGUIQuaternion_h_
32 #include "CEGUI/Base.h"
33 #include "CEGUI/Interpolator.h"
34 #include "CEGUI/Vector.h"
67 class CEGUIEXPORT Quaternion :
68 public AllocatedObject<Quaternion>
72 inline Quaternion(
float w = 1.0f,
float x = 0.0f,
float y = 0.0f,
float z = 0.0f):
80 inline Quaternion(
const Quaternion& v):
88 inline Quaternion& operator = (
const Quaternion& v)
110 static Quaternion eulerAnglesRadians(
float x,
float y,
float z);
124 static Quaternion eulerAnglesDegrees(
float x,
float y,
float z);
149 return (d_w == v.
d_w) && (d_x == v.
d_x) && (d_y == v.
d_y) && (d_z == v.
d_z);
155 return (d_w != v.
d_w) || (d_x != v.
d_x) || (d_y != v.
d_y) || (d_z != v.
d_z);
159 inline Quaternion operator - ()
const
161 return Quaternion(-d_w, -d_x, -d_y, -d_z);
165 inline Quaternion operator * (
float v)
const
167 return Quaternion(d_w * v, d_x * v, d_y * v, d_z * v);
171 inline friend Quaternion operator * (
float v,
const Quaternion& q)
173 return Quaternion(v * q.d_w, v * q.d_x, v * q.d_y, v * q.d_z);
177 inline float dot(
const Quaternion& v)
const
179 return d_w * v.d_w + d_x * v.d_x + d_y * v.d_y + d_z * v.d_z;
183 inline Quaternion
operator + (
const Quaternion& v)
const
185 return Quaternion(d_w + v.d_w, d_x + v.d_x, d_y + v.d_y, d_z + v.d_z);
195 inline Quaternion operator * (
const Quaternion& v)
const
198 d_w * v.d_w - d_x * v.d_x - d_y * v.d_y - d_z * v.d_z,
199 d_w * v.d_x + d_x * v.d_w + d_y * v.d_z - d_z * v.d_y,
200 d_w * v.d_y + d_y * v.d_w + d_z * v.d_x - d_x * v.d_z,
201 d_w * v.d_z + d_z * v.d_w + d_x * v.d_y - d_y * v.d_x
208 inline float length()
const
210 return sqrtf((d_w * d_w) + (d_x * d_x) + (d_y * d_y) + (d_z * d_z));
216 inline float normalise()
218 const float len = length();
219 const float factor = 1.0f / len;
220 *
this = *
this * factor;
250 inline friend std::ostream& operator << (std::ostream& s,
const Quaternion& v)
252 s <<
"CEGUI::Quaternion(" << v.
d_w <<
", " << v.
d_x <<
", " << v.
d_y <<
", " << v.
d_z <<
")";
272 class QuaternionSlerpInterpolator :
public Interpolator
275 typedef PropertyHelper<Quaternion> Helper;
281 virtual const String&
getType()
const;
285 const String& value2,
290 const String& value1,
291 const String& value2,
303 #endif // end of guard _CEGUIQuaternion_h_
virtual ~QuaternionSlerpInterpolator()
destructor
Definition: Quaternion.h:304
virtual String interpolateAbsolute(const String &value1, const String &value2, float position)
bool CEGUIEXPORT operator!=(const String &str1, const String &str2)
Return true if String str1 is not equal to String str2.
virtual String interpolateRelative(const String &base, const String &value1, const String &value2, float position)
Main namespace for Crazy Eddie's GUI Library.
Definition: arch_overview.dox:1
Class to represent rotation, avoids Gimbal lock.
Definition: Quaternion.h:93
virtual const String & getType() const
returns type string of this interpolator
virtual String interpolateRelativeMultiply(const String &base, const String &value1, const String &value2, float position)
float d_x
x component of the vector part
Definition: Quaternion.h:311
bool CEGUIEXPORT operator==(const String &str1, const String &str2)
Return true if String str1 is equal to String str2.
String class used within the GUI system.
Definition: String.h:88
String CEGUIEXPORT operator+(const String &str1, const String &str2)
Return String object that is the concatenation of the given inputs.
float d_w
imaginary part
Definition: Quaternion.h:309
float d_z
z component of the vector part
Definition: Quaternion.h:315
float d_y
y component of the vector part
Definition: Quaternion.h:313