#define QUATERNION_H_
#include "vector.h"
+#include "matrix.h"
namespace gph {
Quaternion(float x_, float y_, float z_, float w_) : x(x_), y(y_), z(z_), w(w_) {}
Quaternion(const Vector3 &v, float s) : x(v.x), y(v.y), z(v.z), w(s) {}
- void normalize();
- void invert();
+ inline void normalize();
+ inline void conjugate();
+ inline void invert();
- Matrix4x4 calc_matrix() const;
+ inline void set_rotation(const Vector3 &axis, float angle);
+ inline void rotate(const Vector3 &axis, float angle);
+ // rotate by a quaternion rq by doing: rq * *this * conjugate(rq)
+ inline void rotate(const Quaternion &rq);
+
+ inline Matrix4x4 calc_matrix() const;
};
inline Quaternion operator -(const Quaternion &q);
inline Quaternion &operator -=(Quaternion &a, const Quaternion &b);
inline Quaternion &operator *=(Quaternion &a, const Quaternion &b);
-inline Quaternion conjugate(const Quaternion &q);
-
inline float length(const Quaternion &q);
inline float length_sq(const Quaternion &q);
inline Quaternion normalize(const Quaternion &q);
+inline Quaternion conjugate(const Quaternion &q);
inline Quaternion inverse(const Quaternion &q);
Quaternion slerp(const Quaternion &a, const Quaternion &b, float t);