geomc 1.0
A c++ linear algebra template library
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Attributes | Friends | List of all members
Quat< T > Class Template Reference

Quaternion class. More...

#include <geomc/linalg/Quaternion.h>

Inheritance diagram for Quat< T >:
VecCommon< T, 4, Quat< T > > VecBase< T, N >

Public Types

typedef Quat< T > self_t
 Self type. I.e., Vec<T,N> if a vector, Quat<T> if a quaternion.
 
typedef T elem_t
 Element type.
 

Public Member Functions

 Quat ()
 Construct a quaternion with all elements 0.
 
 Quat (T x, T y, T z, T w)
 Construct a quaternion with elements (x, y, z, w)
 
 Quat (const T v[4])
 Construct a quaternion from the contents of the 4-element array v
 
 Quat (const Vec< T, 3 > &v, T w)
 Construct a quaternion with vector part v and real part w.
 
 Quat (const Vec< T, 4 > &v)
 Construct a quaternion from the 4D vector v.
 
 Quat (const std::initializer_list< T > &items)
 
template<typename U >
 operator Quat< U > () const
 Cast this Quat to a new coordinate type U.
 
Vec< T, 3 > imag () const
 The vector part of this quaternion.
 
real () const
 The scalar part of this quaternion.
 
Quat< T > conj () const
 The complex conjugate of this quaternion; also the inverse rotation.
 
Quat< T > mult (const Quat< T > &q) const
 Quaternion multiplication.
 
Vec< T, 4 > to_axis_angle_rotation () const
 Convert this unit quaternion to an axis-angle rotation representation (x, y, z, radians).
 
Vec< T, 3 > to_angular_velocity () const
 Convert this unit quaternion to an angular velocity representation, with the magnitude of the axis representing the rate of rotation in radians.
 
Quat< T > rotation_scale (T t) const
 Interpolate this unit quaternion with the null rotation according to the interpolation parameter 0 <= t <= 1.
 
Quat< T > slerp (const Quat< T > &q1, T t) const
 Spherical linear interpolation, per Ken Shoemake. Interpolate smoothly between two quaternion orientation states. More...
 
Quat< T > exp () const
 Quaternion exponential eq. More...
 
Quat< T > log () const
 Quaternion natural log.
 
const T & operator[] (index_t idx) const
 Vector element access. More...
 
T & operator[] (index_t idx)
 Vector element access. More...
 
 operator Vec< U, N > () const
 Element typecast. More...
 
bool operator== (const self_t &vv) const
 Equality test. More...
 
bool operator!= (const self_t &vv) const
 Inequality test. More...
 
self_t operator+ (const self_t &v) const
 Element-wise addition.
 
self_toperator+= (const self_t &vv)
 Element-wise addition and assignment.
 
self_t operator- (const self_t &v) const
 Element-wise subtraction.
 
self_t operator- () const
 Negation. More...
 
self_toperator-= (const self_t &vv)
 Subtraction and assignment.
 
self_toperator*= (T s)
 Scalar multiplication and assignment.
 
self_toperator*= (const self_t &vv)
 Element-wise multiplication and assignment.
 
self_toperator/= (T s)
 Scalar division and assignment.
 
self_t add (const self_t &v) const
 Vector addition. More...
 
self_t sub (const self_t &v) const
 Vector subtraction. More...
 
self_t scale (const self_t &v) const
 Element-wise multiplication. More...
 
self_t scale (T a) const
 Scalar multiple. More...
 
self_t unit () const
 Vector normalization. More...
 
dot (const self_t &v) const
 Dot product. More...
 
mag () const
 Euclidean norm (magnitude). More...
 
mag2 () const
 Squared magnitude. More...
 
dist (const self_t &pt) const
 Distance between points. More...
 
dist2 (const self_t &pt) const
 Distance squared to a point. More...
 
self_t reflect_about (self_t normal) const
 Reflection about a normal. More...
 
self_t bounce_on (const self_t &normal) const
 Elastic collision. More...
 
self_t project_on (const self_t &axis) const
 Orthogonal projection to an axis. More...
 
fraction_on (const self_t &axis) const
 Return the component of this that projects to axis, as a fraction of axis's length. More...
 
self_t with_length (T mag) const
 Compute a vector with the direction of this and a new magnitude mag. More...
 
self_t mix (const self_t &v, T mix) const
 Linear interpolation. More...
 
angle_to (const self_t &v) const
 Angle between vectors. More...
 
self_t abs () const
 Element-wise absolute value. More...
 
self_t floor () const
 Element-wise floor function. More...
 
self_t ceil () const
 Element-wise ceiling function. More...
 
self_t min (const self_t &v) const
 Element-wise minimum of two Vecs. More...
 
min () const
 Minimum element. More...
 
self_t max (const self_t &v) const
 Element-wise maximum of two Vecs. More...
 
max () const
 Maximum element. More...
 
self_t clamp (const self_t &lo, const self_t &hi) const
 Element-wise clamp. More...
 
self_t round () const
 Round each element to the nearest integer.
 
index_t argmax () const
 Return the index of the coordinate with the largest absolute value.
 
index_t argmin () const
 Return the index of the coordinate with the smallest absolute value.
 
PointType< T, M >::point_t resized () const
 Resized copy of a vector. More...
 
bool is_zero () const
 Return true if all elements are zero.
 
index_t size () const
 The number of elements in this vector. Always equal to N.
 
const T & get (index_t idx) const
 
T & get (index_t idx)
 
const T * begin () const
 
T * begin ()
 
const T * end () const
 
T * end ()
 

Static Public Member Functions

static Quat< T > rotation_from_axis_angle (const Vec< T, 3 > &axis, T angle)
 Rotation quaternion from an axis and angle. More...
 
static Quat< T > rotation_direction_align (const Vec< T, 3 > &v, const Vec< T, 3 > &alignWith)
 Rotation to align one vector with another. More...
 

Static Public Attributes

static constexpr index_t DIM
 Vector dimension.
 
static const self_t ones
 
static const self_t zeros
 

Protected Attributes

v [N]
 

Friends

Quat< T > operator* (const Quat< T > &q1, const Quat< T > &q2)
 Quaternion multiplication.
 
Vec< T, 3 > operator* (const Quat< T > &q, const Vec< T, 3 > &v)
 Quaternion conjugation, ‘q * v * q’`. More...
 
Vec< T, 3 > operator* (const Vec< T, 3 > &v, const Quat< T > &q)
 Quaternion inverse conjugation, q' * v * q. More...
 

Detailed Description

template<typename T>
class geom::Quat< T >

Quaternion class.

(x, y, z) is the vector part, while w is the real part. This class differs slightly from convention in that the real part is the last coordinate rather than the first; this scheme was chosen to maintain naming consistency with the rest of the library.

Constructor & Destructor Documentation

◆ Quat()

Quat ( const std::initializer_list< T > &  items)
inline

Construct a quaternion from a brace-initialization list. (c++11)

Example: Quat<float> q = {0, 0, 0, 1};

Parameters
itemsA brace-initializer list.

Member Function Documentation

◆ abs()

self_t abs ( ) const
inlineinherited

Element-wise absolute value.

Returns
A new vector x such that x[i] = abs(this[i]).

◆ add()

self_t add ( const self_t v) const
inlineinherited

Vector addition.

Parameters
vAnother vector.
Returns
A new vector x such that x[i] = this[i] + v[i].

◆ angle_to()

T angle_to ( const self_t v) const
inlineinherited

Angle between vectors.

Parameters
vAnother vector.
Returns
Angle in radians between this and v, between 0 and pi.

◆ begin() [1/2]

T * begin ( )
inlineinherited
Returns
A writeable iterator pointing at the first element.

◆ begin() [2/2]

const T * begin ( ) const
inlineinherited
Returns
A read-only iterator pointing at the first element.

◆ bounce_on()

self_t bounce_on ( const self_t normal) const
inlineinherited

Elastic collision.

Treat this as a velocity vector or incident ray; this function returns the velocity reflected off of a surface with normal normal. Convenience for -reflect_about(normal).

Parameters
normalNormal of surface to "bounce" on.
Returns
The "bounced" direction vector.

◆ ceil()

self_t ceil ( ) const
inlineinherited

Element-wise ceiling function.

Returns
A new vector x such that x[i] = ceil(this[i]).

◆ clamp()

self_t clamp ( const self_t lo,
const self_t hi 
) const
inlineinherited

Element-wise clamp.

Parameters
loElement-wise lower extremes.
hiElement-wise upper extremes.
Returns
A new vector such that each element x[i] is clamped between lo[i] and hi[i].

◆ dist()

T dist ( const self_t pt) const
inlineinherited

Distance between points.

Parameters
ptAnother point.
Returns
The distance between this and pt.

◆ dist2()

T dist2 ( const self_t pt) const
inlineinherited

Distance squared to a point.

Parameters
ptAnother point.
Returns
The square of the distance between this and pt.

◆ dot()

T dot ( const self_t v) const
inlineinherited

Dot product.

Parameters
vAnother vector.
Returns
The dot product of this with v.

◆ end() [1/2]

T * end ( )
inlineinherited
Returns
A writeable iterator pointing just beyond the last element.

◆ end() [2/2]

const T * end ( ) const
inlineinherited
Returns
A read-only iterator pointing just beyond the last element.

◆ exp()

Quat< T > exp ( ) const
inline

Quaternion exponential eq.

Returns
A quaternion representing a rotation about q.imag() by angle 2 * |q| and a scaling by eq.real().

◆ floor()

self_t floor ( ) const
inlineinherited

Element-wise floor function.

Returns
A new vector x such that x[i] = floor(this[i]).

◆ fraction_on()

T fraction_on ( const self_t axis) const
inlineinherited

Return the component of this that projects to axis, as a fraction of axis's length.

Parameters
axisAn arbitrary basis vector.

◆ get() [1/2]

T & get ( index_t  idx)
inlineinherited

Get the element at index idx.

Parameters
idxIndex of element.
Returns
A reference to the element at idx.

◆ get() [2/2]

const T & get ( index_t  idx) const
inlineinherited

Get the element at index idx.

Parameters
idxIndex of element.
Returns
A const reference to the element at idx.

◆ mag()

T mag ( ) const
inlineinherited

Euclidean norm (magnitude).

Returns
The Euclidean magnitude (geometric length) of this vector.

◆ mag2()

T mag2 ( ) const
inlineinherited

Squared magnitude.

Returns
The square of the magnitude of this vector.

◆ max() [1/2]

T max ( ) const
inlineinherited

Maximum element.

Returns
The value of the component with the highest value.

◆ max() [2/2]

self_t max ( const self_t v) const
inlineinherited

Element-wise maximum of two Vecs.

Parameters
vAnother vector.
Returns
A new vector x such that x[i] = max(this[i], v[i]).

◆ min() [1/2]

T min ( ) const
inlineinherited

Minimum element.

Returns
The value of the component with the lowest value.

◆ min() [2/2]

self_t min ( const self_t v) const
inlineinherited

Element-wise minimum of two Vecs.

Parameters
vAnother vector.
Returns
A new vector x such that x[i] = min(this[i], v[i]).

◆ mix()

self_t mix ( const self_t v,
mix 
) const
inlineinherited

Linear interpolation.

A mix parameter of 0 evaluates to this, while 1 is v.

Parameters
vAnother vector.
mixA mixing factor between 0 and 1.
Returns
A linear mixing of this with v.

◆ operator Vec< U, N >()

operator Vec< U, N > ( ) const
inlineexplicitinherited

Element typecast.

Returns
A new vector with all elements cast to type U.

◆ operator!=()

bool operator!= ( const self_t vv) const
inlineinherited

Inequality test.

Returns
true if any corresponding elements of this and vv are unequal, false otherwise.

◆ operator-()

self_t operator- ( ) const
inlineinherited

Negation.

Returns
A copy of this vector with all elements negated (i.e. a vector pointing in the opposite direction).

◆ operator==()

bool operator== ( const self_t vv) const
inlineinherited

Equality test.

Returns
true if all corresponding elements of this and vv are equal, false otherwise.

◆ operator[]() [1/2]

T & operator[] ( index_t  idx)
inlineinherited

Vector element access.

Parameters
idxIndex of element to retrieve.
Returns
A reference to the element at index idx.

◆ operator[]() [2/2]

const T & operator[] ( index_t  idx) const
inlineinherited

Vector element access.

Parameters
idxIndex of element to retrieve.
Returns
A read-only reference to the element at index idx.

◆ project_on()

self_t project_on ( const self_t axis) const
inlineinherited

Orthogonal projection to an axis.

Parameters
axisA direction vector.
Returns
A vector in direction axis with magnitude equal to the component of this aligned with axis.

◆ reflect_about()

self_t reflect_about ( self_t  normal) const
inlineinherited

Reflection about a normal.

Parameters
normalAxis of reflection.
Returns
A copy of this vector reflected across the given axis.

◆ resized()

PointType< T, M >::point_t resized ( ) const
inlineinherited

Resized copy of a vector.

Template Parameters
MDimension of new vector.
Returns
A new vector with size M. If M is larger than N, the new elements will be set to zero. If M is 1, then the return type is T.

◆ rotation_direction_align()

static Quat< T > rotation_direction_align ( const Vec< T, 3 > &  v,
const Vec< T, 3 > &  alignWith 
)
inlinestatic

Rotation to align one vector with another.

Parameters
vUnit vector to align.
alignWithUnit direction to align with.
Returns
A quaternion rotating v into alignment with alignWith.

◆ rotation_from_axis_angle()

static Quat< T > rotation_from_axis_angle ( const Vec< T, 3 > &  axis,
angle 
)
inlinestatic

Rotation quaternion from an axis and angle.

Parameters
axisAxis of rotation (not necessesarily a unit vector)
angleAngle of rotation in radians
Returns
A unit quaternion representing a rotation of angle radians about axis.

◆ scale() [1/2]

self_t scale ( const self_t v) const
inlineinherited

Element-wise multiplication.

Parameters
vAnother vector.
Returns
A new vector x such that x[i] = this[i] * v[i].

◆ scale() [2/2]

self_t scale ( a) const
inlineinherited

Scalar multiple.

Parameters
aA constant scale factor.
Returns
A new vector x such that x[i] = this[i] * a.

◆ slerp()

Quat< T > slerp ( const Quat< T > &  q1,
t 
) const
inline

Spherical linear interpolation, per Ken Shoemake. Interpolate smoothly between two quaternion orientation states.

Parameters
q1The rotation at t = 1.
tInterpolation parameter between 0 and 1.
Returns

◆ sub()

self_t sub ( const self_t v) const
inlineinherited

Vector subtraction.

Parameters
vAnother vector.
Returns
A new vector x such that x[i] = this[i] - v[i].

◆ unit()

self_t unit ( ) const
inlineinherited

Vector normalization.

Returns
A copy of this vector with unit length.

◆ with_length()

self_t with_length ( mag) const
inlineinherited

Compute a vector with the direction of this and a new magnitude mag.

If this is the zero vector, it will remain unchanged.

Friends And Related Function Documentation

◆ operator* [1/2]

Vec< T, 3 > operator* ( const Quat< T > &  q,
const Vec< T, 3 > &  v 
)
friend

Quaternion conjugation, ‘q * v * q’`.

If q is a unit quaternion, then q * v is a rotation of v by q.

◆ operator* [2/2]

Vec< T, 3 > operator* ( const Vec< T, 3 > &  v,
const Quat< T > &  q 
)
friend

Quaternion inverse conjugation, q' * v * q.

If q is a unit quaternion, then v * q is a rotation of v by q-1.


The documentation for this class was generated from the following files: