XQuat#

template<typename T>
class XQuat#

Template class representing a quaternion with x, y, z, and w components.

A template-based quaternion class that provides quaternion operations including arithmetic operations, rotations, and conversions. Quaternions are commonly used for representing rotations in 3D space without gimbal lock issues.

The quaternion is stored as (x, y, z, w) where (x, y, z) represents the vector part and w represents the scalar part.

Note

This class follows the Hamilton convention for quaternion multiplication

Template Parameters:

T – The numeric type for quaternion components (typically float or double)

Public Types

typedef T value_type#

Type alias for the template parameter T.

Public Functions

inline XQuat()#

Default constructor creates identity quaternion (0, 0, 0, 1)

inline XQuat(const T *p)#

Constructor that initializes components from an array.

Parameters:

p[in] Pointer to array of at least 4 elements in order [x, y, z, w]

inline XQuat(T x_, T y_, T z_, T w_)#

Constructor that initializes components with specific values.

Parameters:
  • x_[in] X component (i part)

  • y_[in] Y component (j part)

  • z_[in] Z component (k part)

  • w_[in] W component (scalar part)

inline XQuat(const Vec3 &v, float w)#

Constructor that creates quaternion from vector and scalar parts.

Parameters:
  • v[in] Vector part containing x, y, z components

  • w[in] Scalar part (w component)

inline explicit XQuat(const Matrix33 &m)#

Constructor that creates quaternion from rotation matrix.

Constructor creating a quaternion from a rotation matrix.

Converts a 3x3 rotation matrix to a quaternion using Shepperd’s method. The algorithm selects the most numerically stable computation path based on the trace and diagonal elements of the matrix.

Parameters:
  • m[in] 3x3 rotation matrix to convert

  • m[in] Rotation matrix to convert to quaternion

Template Parameters:

T – Template type parameter for the quaternion components

inline operator T*()#

Conversion operator to non-const pointer to components.

Returns:

Pointer to the first component (x)

inline operator const T*() const#

Conversion operator to const pointer to components.

Returns:

Const pointer to the first component (x)

inline void Set(T x_, T y_, T z_, T w_)#

Sets all four components of the quaternion.

Parameters:
  • x_[in] New x component value

  • y_[in] New y component value

  • z_[in] New z component value

  • w_[in] New w component value

inline XQuat<T> operator*(T scale) const#

Scalar multiplication operator.

Parameters:

scale[in] Scalar value to multiply with

Returns:

New quaternion with each component multiplied by scale

inline XQuat<T> operator/(T scale) const#

Scalar division operator.

Parameters:

scale[in] Scalar value to divide by

Returns:

New quaternion with each component divided by scale

inline XQuat<T> operator+(const XQuat<T> &v) const#

Quaternion addition operator.

Parameters:

v[in] Quaternion to add

Returns:

New quaternion that is the sum of this quaternion and v

inline XQuat<T> operator-(const XQuat<T> &v) const#

Quaternion subtraction operator.

Parameters:

v[in] Quaternion to subtract

Returns:

New quaternion that is the difference of this quaternion and v

inline XQuat<T> operator*(XQuat<T> q) const#

Quaternion multiplication operator (Hamilton product)

Performs quaternion multiplication following Hamilton convention

Parameters:

q[in] Quaternion to multiply with

Returns:

New quaternion that is the Hamilton product of this quaternion and q

inline XQuat<T> &operator*=(T scale)#

Scalar multiplication assignment operator.

Parameters:

scale[in] Scalar value to multiply with

Returns:

Reference to this quaternion after multiplication

inline XQuat<T> &operator/=(T scale)#

Scalar division assignment operator.

Parameters:

scale[in] Scalar value to divide by

Returns:

Reference to this quaternion after division

inline XQuat<T> &operator+=(const XQuat<T> &v)#

Quaternion addition assignment operator.

Parameters:

v[in] Quaternion to add

Returns:

Reference to this quaternion after addition

inline XQuat<T> &operator-=(const XQuat<T> &v)#

Quaternion subtraction assignment operator.

Parameters:

v[in] Quaternion to subtract

Returns:

Reference to this quaternion after subtraction

inline bool operator!=(const XQuat<T> &v) const#

Inequality comparison operator.

Parameters:

v[in] Quaternion to compare with

Returns:

True if any component differs, false if all components are equal

inline XQuat<T> operator-() const#

Unary negation operator.

Returns:

New quaternion with all components negated

inline XVector3<T> GetAxis() const#

Gets the vector part of the quaternion.

Returns:

3D vector containing the x, y, z components

Public Members

T x#

X component of the quaternion (i part)

T y#

Y component of the quaternion (j part)

T z#

Z component of the quaternion (k part)

T w#

W component of the quaternion (scalar part)