#pragma once #include "matrix.hpp" #include "transform.hpp" #include "vector.hpp" constexpr double PI = 3.141592653589793; template constexpr inline T radians(const T degrees) { return degrees / static_cast(180) * static_cast(PI); } template constexpr inline T degrees(const T radians) { return radians / static_cast(PI) * static_cast(180); } template constexpr inline bool nearly_equal(const T a, const T b) { return std::nextafter(a, std::numeric_limits::lowest()) <= b && std::nextafter(a, std::numeric_limits::max()) >= b; } Matrix4x4 matrix_from_quat(const Quaternion quat); Quaternion quat_from_matrix(const Matrix3x3 matrix); Quaternion euler_to_quat(const Vector3 angle); Vector3 quat_to_euler(const Quaternion quat); Matrix4x4 inverse(const Matrix4x4 m); Quaternion angle_axis(const float angle, const Vector3 axis);