#ifndef CORE_QUATERNION_H #define CORE_QUATERNION_H #include "math/Vector.h" #include "utils/ArrayString.h" namespace Core { class Quaternion final { Vector3 xyz; float w; public: Quaternion(); Quaternion(const Vector3& axis, float angle); Quaternion lerp(float f, const Quaternion& other) const; Quaternion& operator*=(const Quaternion& other); Quaternion operator*(const Quaternion& other) const; Vector3 operator*(const Vector3& v) const; // returns true on error and calls the error callback template check_return bool toString(ArrayString& s) const { return s.append("(") || s.append(xyz[0]) || s.append(" i + ") || s.append(xyz[1]) || s.append(" j + ") || s.append(xyz[2]) || s.append(" k + ") || s.append(w) || s.append(')'); } }; } #endif