basic_quaternion

namespace nin {
    template <std::floating_point T>
    struct basic_quaternion;

    using quaternion = basic_quaternion<double>;
}

A Hamilton quaternion q = w + xi + yj + zk with full arithmetic support. All four components default to zero.

The type alias quaternion is provided for basic_quaternion<double>.

Data members

Member Type

w

T

x

T

y

T

z

T

Nested types

Type Definition

value_type

T

Member functions

(Constructor)

constructs a quaternion

basic_quaternion()

(1)

basic_quaternion(basic_quaternion<T1> const& other)

(2)

basic_quaternion(T w, T x, T y, T z)

(3)

  • (1) Default constructor. All components are zero.

  • (2) Explicit converting constructor from a different floating-point type.

  • (3) Component constructor.

conjugate

conjugates the quaternion in place

void conjugate()

(1)

Negates the imaginary components (x, y, z).

normalize

normalises the quaternion in place

void normalize()

(1)

Divides every component by norm(*this).

invert

inverts the quaternion in place

void invert()

(1)

Conjugates and divides by the squared norm.

operator+, operator- (unary)

unary plus and negation

basic_quaternion operator+() const

(1)

basic_quaternion operator-() const

(2)

  • (1) Returns a copy.

  • (2) Returns the quaternion with all components negated.

operator+=, operator-=, operator*=, operator/=

compound assignment with another quaternion

basic_quaternion& operator+=(basic_quaternion const&)

(1)

basic_quaternion& operator-=(basic_quaternion const&)

(2)

basic_quaternion& operator*=(basic_quaternion const&)

(3)

basic_quaternion& operator/=(basic_quaternion const&)

(4)

Hamilton product for (3); right-multiply by inverse for (4).

operator+=, operator-=, operator*=, operator/= (scalar)

compound assignment with a scalar

basic_quaternion& operator+=(T scalar)

(1)

basic_quaternion& operator-=(T scalar)

(2)

basic_quaternion& operator*=(T scalar)

(3)

basic_quaternion& operator/=(T scalar)

(4)

Scalar operations apply to every component for (3) and (4), and to the real part for (1) and (2).

Non-member functions

norm2, norm

squared norm and norm

T norm2(basic_quaternion<T> const& Q)

(1)

T norm(basic_quaternion<T> const& Q)

(2)

conj, inv

conjugate and inverse (out-of-place)

basic_quaternion<T> conj(basic_quaternion<T> Q)

(1)

basic_quaternion<T> inv(basic_quaternion<T> Q)

(2)

operator+, operator-, operator*, operator/

binary arithmetic

basic_quaternion<T> operator+(lhs, rhs)

quaternion-quaternion and scalar

basic_quaternion<T> operator-(lhs, rhs)

quaternion-quaternion and scalar

basic_quaternion<T> operator*(lhs, rhs)

quaternion-quaternion and scalar

basic_quaternion<T> operator/(lhs, rhs)

quaternion-quaternion and scalar

Mixed quaternion-scalar overloads are provided for all operators except scalar / quaternion.

real, imag

real and imaginary projections

T& real(basic_quaternion<T>& Q)

(1)

T real(basic_quaternion<T> const& Q)

(2)

std::array<T,3> imag(basic_quaternion<T> const& Q)

(3)

  • (1)-(2) Returns the scalar part w.

  • (3) Returns the vector part {x, y, z}.