From df85b5eac57b7e087abb5c95887a79227728bb4d Mon Sep 17 00:00:00 2001 From: lisyarus Date: Mon, 25 Jan 2021 22:12:00 +0300 Subject: [PATCH] Make quaternion constructor accept a vector instead of coordinates --- libs/geom/include/psemek/geom/quaternion.hpp | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) 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