quaternion: expand elementwise and scalar operators
This commit is contained in:
parent
040db9118c
commit
cbf4a716ac
@ -95,6 +95,15 @@ quaternion<T>::from_to (const vector<3,T> u, const vector<3,T> v)
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
template <typename T>
|
||||
quaternion<T>
|
||||
quaternion<T>::operator- () const noexcept
|
||||
{
|
||||
return { .w = -w, .x = -x, .y = -y, .z = -z };
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
template <typename T>
|
||||
quaternion<T>
|
||||
@ -104,6 +113,45 @@ cruft::conjugate (quaternion<T> q)
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
template <typename T>
|
||||
T
|
||||
cruft::dot (quaternion<T> a, quaternion<T> b)
|
||||
{
|
||||
return a.w * b.w +
|
||||
a.x * b.x +
|
||||
a.y * b.y +
|
||||
a.z * b.z;
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
template <typename T>
|
||||
quaternion<T> cruft::operator* (quaternion<T> a, T b)
|
||||
{
|
||||
return {
|
||||
.w = a.w * b,
|
||||
.x = a.x * b,
|
||||
.y = a.y * b,
|
||||
.z = a.z * b
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
template <typename T>
|
||||
quaternion<T> cruft::operator+ (quaternion<T> a, quaternion<T> b)
|
||||
{
|
||||
return {
|
||||
.w = a.w + b.w,
|
||||
.x = a.x + b.x,
|
||||
.y = a.y + b.y,
|
||||
.z = a.z + b.z
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
template <typename T>
|
||||
quaternion<T>
|
||||
|
@ -56,6 +56,9 @@ namespace cruft {
|
||||
/// Converts a rotation quaternion into an equivalent matrix form.
|
||||
matrix4<T> as_matrix (void) const;
|
||||
|
||||
/// Negate all components
|
||||
quaternion operator- () const noexcept;
|
||||
|
||||
/// Constructs a identity rotation quaternion.
|
||||
static constexpr
|
||||
quaternion<T>
|
||||
@ -146,6 +149,22 @@ namespace cruft {
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
template <typename T>
|
||||
T dot (quaternion<T>, quaternion<T>);
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
template <typename T> quaternion<T> operator* (quaternion<T>, T);
|
||||
template <typename T> quaternion<T> operator* (T, quaternion<T>);
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
template <typename T>
|
||||
quaternion<T>
|
||||
operator+ (quaternion<T>, quaternion<T>);
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
template <typename T>
|
||||
quaternion<T>
|
||||
operator* (quaternion<T>, quaternion<T>);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user