1 /* Copyright (C) 2009 Wildfire Games.
2 * This file is part of 0 A.D.
4 * 0 A.D. is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 2 of the License, or
7 * (at your option) any later version.
9 * 0 A.D. is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
18 #ifndef INCLUDED_QUATERNION
19 #define INCLUDED_QUATERNION
32 CQuaternion(float x
, float y
, float z
, float w
);
34 CQuaternion
operator + (const CQuaternion
&quat
) const;
35 CQuaternion
&operator += (const CQuaternion
&quat
);
37 CQuaternion
operator - (const CQuaternion
&quat
) const;
38 CQuaternion
&operator -= (const CQuaternion
&quat
);
40 CQuaternion
operator * (const CQuaternion
&quat
) const;
41 CQuaternion
&operator *= (const CQuaternion
&quat
);
43 CQuaternion
operator * (float factor
) const;
45 float Dot(const CQuaternion
& quat
) const;
47 void FromEulerAngles (float x
, float y
, float z
);
48 CVector3D
ToEulerAngles();
50 // Convert the quaternion to matrix
51 CMatrix3D
ToMatrix() const;
52 void ToMatrix(CMatrix3D
& result
) const;
54 // Sphere interpolation
55 void Slerp(const CQuaternion
& from
, const CQuaternion
& to
, float ratio
);
57 // Normalised linear interpolation
58 void Nlerp(const CQuaternion
& from
, const CQuaternion
& to
, float ratio
);
60 // Create a quaternion from axis/angle representation of a rotation
61 void FromAxisAngle(const CVector3D
& axis
, float angle
);
63 // Convert the quaternion to axis/angle representation of a rotation
64 void ToAxisAngle(CVector3D
& axis
, float& angle
);
66 // Normalize this quaternion
69 // Rotate a vector by this quaternion. Assumes the quaternion is normalised.
70 CVector3D
Rotate(const CVector3D
& vec
) const;
72 // Calculate q^-1. Assumes the quaternion is normalised.
73 CQuaternion
GetInverse() const;