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>
|
template <typename T>
|
||||||
quaternion<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>
|
template <typename T>
|
||||||
quaternion<T>
|
quaternion<T>
|
||||||
|
@ -56,6 +56,9 @@ namespace cruft {
|
|||||||
/// Converts a rotation quaternion into an equivalent matrix form.
|
/// Converts a rotation quaternion into an equivalent matrix form.
|
||||||
matrix4<T> as_matrix (void) const;
|
matrix4<T> as_matrix (void) const;
|
||||||
|
|
||||||
|
/// Negate all components
|
||||||
|
quaternion operator- () const noexcept;
|
||||||
|
|
||||||
/// Constructs a identity rotation quaternion.
|
/// Constructs a identity rotation quaternion.
|
||||||
static constexpr
|
static constexpr
|
||||||
quaternion<T>
|
quaternion<T>
|
||||||
@ -146,6 +149,22 @@ namespace cruft {
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
template <typename T>
|
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>
|
quaternion<T>
|
||||||
operator* (quaternion<T>, quaternion<T>);
|
operator* (quaternion<T>, quaternion<T>);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user