27 #ifndef _QUATERNION_H_ 28 #define _QUATERNION_H_ 52 Scalar cosYaw = cos(yaw / 2);
53 Scalar sinYaw = sin(yaw / 2);
54 Scalar cosPitch = cos(pitch / 2);
55 Scalar sinPitch = sin(pitch / 2);
56 Scalar cosRoll = cos(roll / 2);
57 Scalar sinRoll = sin(roll / 2);
58 setValue(cosRoll * sinPitch * cosYaw + sinRoll * cosPitch * sinYaw,
59 cosRoll * cosPitch * sinYaw - sinRoll * sinPitch * cosYaw,
60 sinRoll * cosPitch * cosYaw - cosRoll * sinPitch * sinYaw,
61 cosRoll * cosPitch * cosYaw + sinRoll * sinPitch * sinYaw);
129 return *
this *= 1 / s;
147 q1[
W] * q2[
Y] + q1[
Y] * q2[
W] + q1[
Z] * q2[
X] - q1[
X] * q2[
Z],
148 q1[
W] * q2[
Z] + q1[
Z] * q2[
W] + q1[
X] * q2[
Y] - q1[
Y] * q2[
X],
149 q1[
W] * q2[
W] - q1[
X] * q2[
X] - q1[
Y] * q2[
Y] - q1[
Z] * q2[
Z]);
164 return q1[
X] * q2[
X] + q1[
Y] * q2[
Y] + q1[
Z] * q2[
Z] + q1[
W] * q2[
W];
204 Scalar r1 = sqrt(1 - x0), r2 = sqrt(x0);
206 Scalar c1 = cos(t1), s1 = sin(t1);
207 Scalar c2 = cos(t2), s2 = sin(t2);
208 return Quaternion(s1 * r1, c1 * r1, s2 * r2, c2 * r2);
Quaternion operator*(const Quaternion &q1, const Quaternion &q2)
Quaternion(const Vector &axis, Scalar angle)
Quaternion & operator/=(Scalar s)
Quaternion inverse() const
Quaternion(const float v[4])
Scalar dot(const Quaternion &q1, const Quaternion &q2)
Quaternion normalized() const
Quaternion operator/(const Quaternion &q, Scalar s)
Quaternion(Scalar x, Scalar y, Scalar z, Scalar w)
void setRotation(const Vector &axis, Scalar angle)
Quaternion & operator+=(const Quaternion &q)
Quaternion & operator-=(const Quaternion &q)
Scalar angle(const Vector &v1, const Vector &v2)
static Quaternion random()
Quaternion(Scalar yaw, Scalar pitch, Scalar roll)
bool approxZero(const Quaternion &q)
Scalar length(const Quaternion &q)
Quaternion(const double v[4])
bool approxEqual(const Quaternion &q1, const Quaternion &q2)
Quaternion operator-(const Quaternion &q1, const Quaternion &q2)
Quaternion operator+(const Quaternion &q1, const Quaternion &q2)
void setEuler(Scalar yaw, Scalar pitch, Scalar roll)
Scalar length2(const Quaternion &q)
Quaternion & operator*=(const Quaternion &q)
void setValue(const float v[4])