crow

Utility library


Project maintained by CaptainCrowbar Hosted on GitHub Pages — Theme by mattgraham

Quaternion

Crow Library by Ross Smith

#include "crow/quaternion.hpp"
namespace Crow;

Quaternion class

template <std::floating_point T> class Quaternion;

A quaternion class based on the scalar type T.

using Qfloat = Quaternion<float>;
using Qdouble = Quaternion<double>;
using Qldouble = Quaternion<long double>;

Predefined type aliases.

using Quaternion::value_type = T;

Member types.

constexpr Quaternion::Quaternion() noexcept;

The default constructor leaves the components uninitialized.

constexpr Quaternion::Quaternion(T a) noexcept;

Sets the real component to the given value, and all other components to zero.

constexpr Quaternion::Quaternion(T a, T b, T c, T d) noexcept;
constexpr Quaternion::Quaternion(T a, const Vector<T, 3>& v) noexcept;

These set all four components explicitly.

constexpr Quaternion::Quaternion(const Quaternion& q) noexcept;
constexpr Quaternion::Quaternion(Quaternion&& q) noexcept;
constexpr Quaternion::~Quaternion() noexcept;
constexpr Quaternion& Quaternion::operator=(const Quaternion& q) noexcept;
constexpr Quaternion& Quaternion::operator=(Quaternion&& q) noexcept;

Other life cycle functions.

constexpr T& Quaternion::operator[](int i) noexcept;
constexpr const T& Quaternion::operator[](int i) const noexcept;
constexpr T& Quaternion::a() noexcept;
constexpr T Quaternion::a() const noexcept;
constexpr T& Quaternion::b() noexcept;
constexpr T Quaternion::b() const noexcept;
constexpr T& Quaternion::c() noexcept;
constexpr T Quaternion::c() const noexcept;
constexpr T& Quaternion::d() noexcept;
constexpr T Quaternion::d() const noexcept;

Element access functions. For the index operator, behaviour is undefined if i<0 or i>3.

constexpr T* Quaternion::begin() noexcept;
constexpr const T* Quaternion::begin() const noexcept;
constexpr T* Quaternion::end() noexcept;
constexpr const T* Quaternion::end() const noexcept;

These return pointers to the beginning and past the end of the internal array.

constexpr Quaternion Quaternion::conj() const noexcept;
constexpr Quaternion Quaternion::conj(const Quaternion& q) const noexcept;

The first version returns the conjugate quaternion. The second version performs the conjugation of q by *this, returning pqp-1 (where p=*this).

size_t Quaternion::hash() const noexcept;
struct std::hash<Quaternion>;

Hash functions.

T Quaternion::norm() const noexcept;
constexpr T Quaternion::norm2() const noexcept;

Returns the quaternion’s norm, or its square.

constexpr Quaternion Quaternion::reciprocal() const noexcept;

Returns the reciprocal of the quaternion. Behaviour is undefined if the quaternion is zero.

constexpr T Quaternion::scalar_part() const noexcept;
constexpr Vector<T, 3> Quaternion::vector_part() const noexcept;

Return the scalar and vector parts of the quaternion.

std::string Quaternion::str(const FormatSpec& spec = {}) const;
std::ostream& operator<<(std::ostream& out, const Quaternion& q);

The str() function formats a quaternion as a string, in the form "H[a,b,c,d]". The spec argument is interpreted in the usual way for T. The output operator calls q.str().

constexpr Vector<T, 4> Quaternion::to_vector() const noexcept;
constexpr static Quaternion Quaternion::from_vector(const Vector<T, 4>& v) noexcept;

Conversion between a quaternion and a 4-vector.

constexpr Quaternion Quaternion::versor() const noexcept;

Returns the quaternion’s versor (unit quaternion). Behaviour is undefined if the quaternion is zero.

constexpr Quaternion Quaternion::operator+() const noexcept;
constexpr Quaternion Quaternion::operator-() const noexcept;
constexpr Quaternion& Quaternion::operator+=(const Quaternion& y) noexcept;
constexpr Quaternion& Quaternion::operator-=(const Quaternion& y) noexcept;
constexpr Quaternion& Quaternion::operator*=(const Quaternion& y) noexcept;
constexpr Quaternion operator+(const Quaternion& x, const Quaternion& y) noexcept;
constexpr Quaternion operator-(const Quaternion& x, const Quaternion& y) noexcept;
constexpr Quaternion operator*(const Quaternion& x, const Quaternion& y) noexcept;

Quaternion arithmetic operators.

constexpr Quaternion& Quaternion::operator*=(T y) noexcept;
constexpr Quaternion& Quaternion::operator/=(T y) noexcept;
constexpr Quaternion operator*(const Quaternion& x, T y) noexcept;
constexpr Quaternion operator*(T x, const Quaternion& y) noexcept;
constexpr Quaternion operator/(const Quaternion& x, T y) noexcept;

Quaternion-scalar arithmetic operators. Behaviour is undefined on division by zero.

constexpr bool operator==(const Quaternion& x, const Quaternion& y) noexcept;
constexpr bool operator!=(const Quaternion& x, const Quaternion& y) noexcept;

Comparison operators.