JSim 2026.06.01-p(1)
Loading...
Searching...
No Matches
frcsim::Quaternion Struct Reference

Unit-quaternion rotation representation and rotation algebra helpers. More...

#include <quaternion.hpp>

Public Member Functions

constexpr Quaternion () noexcept
constexpr Quaternion (double w_, double x_, double y_, double z_) noexcept
constexpr Quaternion (double w_, const Vector3 &v) noexcept
constexpr double norm2 () const noexcept
double norm () const noexcept
bool isIdentity (double eps=1e-12) const noexcept
bool hasNaN () const noexcept
Quaternion normalized () const noexcept
void normalizeIfNeeded (double eps=1e-12) noexcept
void toAxisAngle (Vector3 &axis, double &angleRad) const noexcept
void toMatrix (double m[3][3]) const noexcept
void normalize () noexcept
constexpr Quaternion conjugate () const noexcept
Quaternion inverse () const noexcept
constexpr Quaternion operator* (const Quaternion &rhs) const noexcept
constexpr Quaternion operator* (double scalar) const noexcept
Vector3 rotate (const Vector3 &v) const noexcept
Vector3 forward () const noexcept
Vector3 up () const noexcept
Vector3 right () const noexcept
constexpr Quaternion operator+ (const Quaternion &rhs) const noexcept
constexpr Quaternion operator- () const noexcept
constexpr bool operator== (const Quaternion &rhs) const noexcept
constexpr bool operator!= (const Quaternion &rhs) const noexcept

Static Public Member Functions

static Quaternion fromAxisAngle (const Vector3 &axis, double angleRad) noexcept
static Quaternion fromAngularVelocity (const Vector3 &omega, double dt) noexcept
static Quaternion slerp (const Quaternion &a, const Quaternion &b, double t) noexcept

Public Attributes

double w
double x
double y
double z

Friends

constexpr Quaternion operator* (double scalar, const Quaternion &q) noexcept
std::ostream & operator<< (std::ostream &os, const Quaternion &q)

Detailed Description

Unit-quaternion rotation representation and rotation algebra helpers.

Physics principle: quaternion rotational kinematics avoids gimbal lock and provides stable composition/integration of 3D orientation. Vectors are rotated with q v q^-1 and orientation updates use angular velocity via quaternion derivatives.

References: https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation https://en.wikipedia.org/wiki/Gimbal_lock

Constructor & Destructor Documentation

◆ Quaternion() [1/3]

frcsim::Quaternion::Quaternion ( )
inlineconstexprnoexcept

◆ Quaternion() [2/3]

frcsim::Quaternion::Quaternion ( double w_,
double x_,
double y_,
double z_ )
inlineconstexprnoexcept

◆ Quaternion() [3/3]

frcsim::Quaternion::Quaternion ( double w_,
const Vector3 & v )
inlineconstexprnoexcept

Member Function Documentation

◆ conjugate()

Quaternion frcsim::Quaternion::conjugate ( ) const
inlinenodiscardconstexprnoexcept

◆ forward()

Vector3 frcsim::Quaternion::forward ( ) const
inlinenodiscardnoexcept

◆ fromAngularVelocity()

Quaternion frcsim::Quaternion::fromAngularVelocity ( const Vector3 & omega,
double dt )
inlinestaticnoexcept

◆ fromAxisAngle()

Quaternion frcsim::Quaternion::fromAxisAngle ( const Vector3 & axis,
double angleRad )
inlinestaticnoexcept

◆ hasNaN()

bool frcsim::Quaternion::hasNaN ( ) const
inlinenodiscardnoexcept

◆ inverse()

Quaternion frcsim::Quaternion::inverse ( ) const
inlinenodiscardnoexcept

◆ isIdentity()

bool frcsim::Quaternion::isIdentity ( double eps = 1e-12) const
inlinenodiscardnoexcept

◆ norm()

double frcsim::Quaternion::norm ( ) const
inlinenodiscardnoexcept

◆ norm2()

double frcsim::Quaternion::norm2 ( ) const
inlinenodiscardconstexprnoexcept

◆ normalize()

void frcsim::Quaternion::normalize ( )
inlinenoexcept

◆ normalized()

Quaternion frcsim::Quaternion::normalized ( ) const
inlinenodiscardnoexcept

◆ normalizeIfNeeded()

void frcsim::Quaternion::normalizeIfNeeded ( double eps = 1e-12)
inlinenoexcept

◆ operator!=()

bool frcsim::Quaternion::operator!= ( const Quaternion & rhs) const
inlinenodiscardconstexprnoexcept

◆ operator*() [1/2]

Quaternion frcsim::Quaternion::operator* ( const Quaternion & rhs) const
inlinenodiscardconstexprnoexcept

◆ operator*() [2/2]

Quaternion frcsim::Quaternion::operator* ( double scalar) const
inlinenodiscardconstexprnoexcept

◆ operator+()

Quaternion frcsim::Quaternion::operator+ ( const Quaternion & rhs) const
inlinenodiscardconstexprnoexcept

◆ operator-()

Quaternion frcsim::Quaternion::operator- ( ) const
inlinenodiscardconstexprnoexcept

◆ operator==()

bool frcsim::Quaternion::operator== ( const Quaternion & rhs) const
inlinenodiscardconstexprnoexcept

◆ right()

Vector3 frcsim::Quaternion::right ( ) const
inlinenodiscardnoexcept

◆ rotate()

Vector3 frcsim::Quaternion::rotate ( const Vector3 & v) const
inlinenodiscardnoexcept

◆ slerp()

Quaternion frcsim::Quaternion::slerp ( const Quaternion & a,
const Quaternion & b,
double t )
inlinestaticnoexcept

◆ toAxisAngle()

void frcsim::Quaternion::toAxisAngle ( Vector3 & axis,
double & angleRad ) const
inlinenoexcept

◆ toMatrix()

void frcsim::Quaternion::toMatrix ( double m[3][3]) const
inlinenoexcept

◆ up()

Vector3 frcsim::Quaternion::up ( ) const
inlinenodiscardnoexcept

◆ operator*

Quaternion operator* ( double scalar,
const Quaternion & q )
friend

◆ operator<<

std::ostream & operator<< ( std::ostream & os,
const Quaternion & q )
friend

Member Data Documentation

◆ w

double frcsim::Quaternion::w

◆ x

double frcsim::Quaternion::x

◆ y

double frcsim::Quaternion::y

◆ z

double frcsim::Quaternion::z

The documentation for this struct was generated from the following file: