diff --git a/libs/geom/include/psemek/geom/quaternion.hpp b/libs/geom/include/psemek/geom/quaternion.hpp index 1fc0f5c5..89b49175 100644 --- a/libs/geom/include/psemek/geom/quaternion.hpp +++ b/libs/geom/include/psemek/geom/quaternion.hpp @@ -18,12 +18,9 @@ namespace psemek::geom static quaternion vector(geom::vector const & v); static quaternion rotation(T angle, geom::vector const & axis); - template - quaternion(Args && ... args) - : coords{ static_cast(std::forward(args))... } - { - static_assert(sizeof...(Args) == 4); - } + quaternion(geom::vector const & v) + : coords{v} + {} T & operator[] (std::size_t i) { return coords[i]; } T const & operator[] (std::size_t i) const { return coords[i]; } @@ -35,25 +32,25 @@ namespace psemek::geom template quaternion quaternion::zero() { - return quaternion{T(0), T(0), T(0), T(0)}; + return quaternion{geom::vector::zero()}; } template quaternion quaternion::identity() { - return quaternion{T(1), T(0), T(0), T(0)}; + return quaternion{{T(1), T(0), T(0), T(0)}}; } template quaternion quaternion::scalar(T value) { - return {value, T(0), T(0), T(0)}; + return {{value, T(0), T(0), T(0)}}; } template quaternion quaternion::vector(geom::vector const & v) { - return {T(0), v[0], v[1], v[2]}; + return {{T(0), v[0], v[1], v[2]}}; } template @@ -62,7 +59,7 @@ namespace psemek::geom auto const c = std::cos(angle / 2); auto const s = std::sin(angle / 2); - return quaternion{c, s * axis[0], s * axis[1], s * axis[2]}; + return quaternion{{c, s * axis[0], s * axis[1], s * axis[2]}}; } template