Make quaternion constructor accept a vector instead of coordinates
This commit is contained in:
parent
e871517909
commit
df85b5eac5
1 changed files with 8 additions and 11 deletions
|
|
@ -18,12 +18,9 @@ namespace psemek::geom
|
||||||
static quaternion<T> vector(geom::vector<T, 3> const & v);
|
static quaternion<T> vector(geom::vector<T, 3> const & v);
|
||||||
static quaternion<T> rotation(T angle, geom::vector<T, 3> const & axis);
|
static quaternion<T> rotation(T angle, geom::vector<T, 3> const & axis);
|
||||||
|
|
||||||
template <typename ... Args>
|
quaternion(geom::vector<T, 4> const & v)
|
||||||
quaternion(Args && ... args)
|
: coords{v}
|
||||||
: coords{ static_cast<T>(std::forward<Args>(args))... }
|
{}
|
||||||
{
|
|
||||||
static_assert(sizeof...(Args) == 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
T & operator[] (std::size_t i) { return coords[i]; }
|
T & operator[] (std::size_t i) { return coords[i]; }
|
||||||
T const & operator[] (std::size_t i) const { return coords[i]; }
|
T const & operator[] (std::size_t i) const { return coords[i]; }
|
||||||
|
|
@ -35,25 +32,25 @@ namespace psemek::geom
|
||||||
template <typename T>
|
template <typename T>
|
||||||
quaternion<T> quaternion<T>::zero()
|
quaternion<T> quaternion<T>::zero()
|
||||||
{
|
{
|
||||||
return quaternion<T>{T(0), T(0), T(0), T(0)};
|
return quaternion<T>{geom::vector<T, 4>::zero()};
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
quaternion<T> quaternion<T>::identity()
|
quaternion<T> quaternion<T>::identity()
|
||||||
{
|
{
|
||||||
return quaternion<T>{T(1), T(0), T(0), T(0)};
|
return quaternion<T>{{T(1), T(0), T(0), T(0)}};
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
quaternion<T> quaternion<T>::scalar(T value)
|
quaternion<T> quaternion<T>::scalar(T value)
|
||||||
{
|
{
|
||||||
return {value, T(0), T(0), T(0)};
|
return {{value, T(0), T(0), T(0)}};
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
quaternion<T> quaternion<T>::vector(geom::vector<T, 3> const & v)
|
quaternion<T> quaternion<T>::vector(geom::vector<T, 3> const & v)
|
||||||
{
|
{
|
||||||
return {T(0), v[0], v[1], v[2]};
|
return {{T(0), v[0], v[1], v[2]}};
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|
@ -62,7 +59,7 @@ namespace psemek::geom
|
||||||
auto const c = std::cos(angle / 2);
|
auto const c = std::cos(angle / 2);
|
||||||
auto const s = std::sin(angle / 2);
|
auto const s = std::sin(angle / 2);
|
||||||
|
|
||||||
return quaternion<T>{c, s * axis[0], s * axis[1], s * axis[2]};
|
return quaternion<T>{{c, s * axis[0], s * axis[1], s * axis[2]}};
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue