#pragma once #include #include "Vector.hpp" struct Rotation { public: Rotation() : vector{} {}; Rotation(Vector<3> vector) : vector{ wrap(vector) } {}; Rotation(float angles[3]) : Rotation(angles[0], angles[1], angles[2]) {}; Rotation(float pitch, float yaw, float roll) { vector = wrap({pitch, yaw, roll }); }; Rotation operator+(Rotation other) const { return wrap(vector + other.vector); } std::string string() const { return vector.string(); } static Vector<3> wrap(Vector<3> v) { return v.map([](auto a) { return fmod(a, 360.0f); }); } float& pitch() { return vector[0]; } float& yaw() { return vector[1]; } float& roll() { return vector[2]; } Vector<3> vector; };