nlib
nn::nlib::simd::Quaternion Class Reference

The class with the collection of functions that handle quaternions. More...

#include "nn/nlib/simd/SimdQuaternion.h"

Static Public Member Functions

static SimdQuaternion Identity () noexcept
 Returns a unit quaternion (0, 0, 0, 1).
 
static SimdQuaternion Conjugate (SimdQuaternionArg q) noexcept
 Returns a conjugate quaternion(-x, -y, -z, w).
 
static f128 Length (SimdQuaternionArg q) noexcept
 Returns the size of a quaternion. More...
 
static f128 LengthSq (SimdQuaternionArg q) noexcept
 Returns the square of the size of a quaternion. More...
 
static f128 RecpLength (SimdQuaternionArg q) noexcept
 Returns the reciprocal of the size of a quaternion. More...
 
static SimdQuaternion Normalize (SimdQuaternionArg q) noexcept
 Normalizes a quaternion. More...
 
static SimdQuaternion NormalizeEst (SimdQuaternionArg q) noexcept
 Normalizes a quaternion with relatively low precision. More...
 
static SimdQuaternion Inverse (SimdQuaternionArg q) noexcept
 Calculates an inverse of a quaternion. More...
 
static SimdQuaternion Ln (SimdQuaternionArg q_normalized) noexcept
 Calculates a natural logarithm of a normalized quaternion. More...
 
static SimdQuaternion Exp (SimdQuaternionArg q) noexcept
 Calculates the exponential of a quaternion. More...
 
static bool IsIdentity (SimdQuaternionArg q) noexcept
 Determines whether a quaternion is a unit quaternion. More...
 
static bool IsInfinite (SimdQuaternionArg q) noexcept
 Determines whether a quaternion has infinite elements. More...
 
static bool IsNaN (SimdQuaternionArg q) noexcept
 Determines whether a quaternion has non-numeric elements. More...
 
static bool CmpEq (SimdQuaternionArg q0, SimdQuaternionArg q1) noexcept
 Determines whether two quaternions are equal. More...
 
static bool CmpNe (SimdQuaternionArg q0, SimdQuaternionArg q1) noexcept
 Determines whether two quaternions are unequal. More...
 
static f128 Dot (SimdQuaternionArg q0, SimdQuaternionArg q1) noexcept
 Calculates the inner product of two quaternions. More...
 
static SimdQuaternion Mult (SimdQuaternionArg q0, SimdQuaternionArg q1) noexcept
 Performs multiplication on two quaternions. More...
 
static SimdQuaternion FromRotationAxisAndSinCos (SimdVectorArg axis_normalized, float sin_half_rad, float cos_half_rad) noexcept
 Calculates a quaternion from the axis and half of the angle of rotation (sin/cos) around the axis. More...
 
static SimdQuaternion FromRotationMatrix (SimdMatrixArg m) noexcept
 Calculates a quaternion from a rotation matrix. More...
 
static SimdQuaternion FromRotationZXY (SimdVectorArg sin_half_xyz, SimdVectorArg cos_half_xyz) noexcept
 Calculates a quaternion from half of the angle of rotation sin/cos) around each of the ZXY axes. More...
 
static SimdVector ToAxisAngle (float *rad, SimdQuaternion q) noexcept
 Calculates the rotation axis vector and the rotation angle in radians from the quaternion. More...
 
static SimdQuaternion Slerp (SimdQuaternionArg q0_normalized, SimdQuaternionArg q1_normalized, float t) noexcept
 Performs spherical linear interpolation on quaternions. More...
 
static SimdQuaternion Squad (SimdQuaternionArg q0_normalized, SimdQuaternionArg q1_normalized, SimdQuaternionArg q2_normalized, SimdQuaternionArg q3_normalized, float t) noexcept
 Performs spherical quadrangle interpolation (squad) on quaternions. More...
 
static void SquadSetup (SimdQuaternion *a, SimdQuaternion *b, SimdQuaternion *c, SimdQuaternionArg q0, SimdQuaternionArg q1, SimdQuaternionArg q2, SimdQuaternionArg q3) noexcept
 Calculates the quaternions for performing spherical quadrangle interpolation (squad) on quaternions. More...
 
static SimdQuaternion BaryCentric (SimdQuaternionArg q0, SimdQuaternionArg q1, SimdQuaternionArg q2, float f, float g) noexcept
 Calculates the barycentric coordinates for quaternions. More...
 

Detailed Description

The class with the collection of functions that handle quaternions.

Description
The imaginary part of the quaternion (x, y, z) is stored in lanes 0 to 2, and the real part is stored in lane 3.
All members of this class are static functions. The class cannot be instantiated.

Definition at line 12 of file SimdQuaternion.h.

Member Function Documentation

nn::nlib::simd::Quaternion::BaryCentric ( SimdQuaternionArg  q0,
SimdQuaternionArg  q1,
SimdQuaternionArg  q2,
float  f,
float  g 
)
staticnoexcept

Calculates the barycentric coordinates for quaternions.

Parameters
[in]q0A normalized quaternion.
[in]q1A normalized quaternion.
[in]q2A normalized quaternion.
[in]fInterpolation factor.
[in]gInterpolation factor.
Returns
The quaternion's barycentric coordinates.
nn::nlib::simd::Quaternion::CmpEq ( SimdQuaternionArg  q0,
SimdQuaternionArg  q1 
)
staticnoexcept

Determines whether two quaternions are equal.

Parameters
[in]q0A quaternion.
[in]q1A quaternion.
Returns
Returns true if q0 and q1 are equal, or false otherwise.
nn::nlib::simd::Quaternion::CmpNe ( SimdQuaternionArg  q0,
SimdQuaternionArg  q1 
)
staticnoexcept

Determines whether two quaternions are unequal.

Parameters
[in]q0A quaternion.
[in]q1A quaternion.
Returns
Returns true if q0 and q1 are not equal, or false otherwise.
nn::nlib::simd::Quaternion::Dot ( SimdQuaternionArg  q0,
SimdQuaternionArg  q1 
)
staticnoexcept

Calculates the inner product of two quaternions.

Parameters
[in]q0A quaternion.
[in]q1A quaternion.
Returns
Stores the dot product in each lane.
nn::nlib::simd::Quaternion::Exp ( SimdQuaternionArg  q)
staticnoexcept

Calculates the exponential of a quaternion.

Parameters
[in]qA quaternion. The w element is ignored in this calculation.
Returns
The exponential of q.
nn::nlib::simd::Quaternion::FromRotationAxisAndSinCos ( SimdVectorArg  axis_normalized,
float  sin_half_rad,
float  cos_half_rad 
)
staticnoexcept

Calculates a quaternion from the axis and half of the angle of rotation (sin/cos) around the axis.

Parameters
[in]axis_normalizedA normalized 3D rotation axis vector.
[in]sin_half_radPasses sin(rad/2), where rad is the angle of rotation.
[in]cos_half_radPasses cos(rad/2), where rad is the angle of rotation.
Returns
Returns the quaternion expressing rotation.
nn::nlib::simd::Quaternion::FromRotationMatrix ( SimdMatrixArg  m)
staticnoexcept

Calculates a quaternion from a rotation matrix.

Parameters
[in]mThe rotation matrix.
Returns
Returns the quaternion expressing rotation.
nn::nlib::simd::Quaternion::FromRotationZXY ( SimdVectorArg  sin_half_xyz,
SimdVectorArg  cos_half_xyz 
)
staticnoexcept

Calculates a quaternion from half of the angle of rotation sin/cos) around each of the ZXY axes.

Parameters
[in]sin_half_xyzA three-dimensional vector (sin(rad_x/2), sin(rad_y/2), sin(rad_z/2)).
[in]cos_half_xyzA three-dimensional vector (cos(rad_x/2), cos(rad_y/2), cos(rad_z/2))
Returns
Returns the quaternion expressing rotation.
Description
Rotates in the order of z-axis (roll), x-axis (pitch), y-axis (yaw).
nn::nlib::simd::Quaternion::Inverse ( SimdQuaternionArg  q)
staticnoexcept

Calculates an inverse of a quaternion.

Parameters
[in]qA quaternion.
Returns
The inverse of the quaternion.
nn::nlib::simd::Quaternion::IsIdentity ( SimdQuaternionArg  q)
staticnoexcept

Determines whether a quaternion is a unit quaternion.

Parameters
[in]qA quaternion.
Returns
Returns true if the quaternion is a unit quaternion, or false otherwise.
nn::nlib::simd::Quaternion::IsInfinite ( SimdQuaternionArg  q)
staticnoexcept

Determines whether a quaternion has infinite elements.

Parameters
[in]qA quaternion.
Returns
Returns true if the quaternion has infinite elements, or false otherwise.
nn::nlib::simd::Quaternion::IsNaN ( SimdQuaternionArg  q)
staticnoexcept

Determines whether a quaternion has non-numeric elements.

Parameters
[in]qA quaternion.
Returns
Returns true if the quaternion has non-numeric elements, or false otherwise.
nn::nlib::simd::Quaternion::Length ( SimdQuaternionArg  q)
staticnoexcept

Returns the size of a quaternion.

Parameters
[in]qA quaternion.
Returns
The size of the quaternion is stored in each lane.
nn::nlib::simd::Quaternion::LengthSq ( SimdQuaternionArg  q)
staticnoexcept

Returns the square of the size of a quaternion.

Parameters
[in]qA quaternion.
Returns
The square of the size of a quaternion is stored in each lane.
nn::nlib::simd::Quaternion::Ln ( SimdQuaternionArg  q_normalized)
staticnoexcept

Calculates a natural logarithm of a normalized quaternion.

Parameters
[in]q_normalizedNormalized quaternion.
Returns
The natural logarithm of q_normalized.
nn::nlib::simd::Quaternion::Mult ( SimdQuaternionArg  q0,
SimdQuaternionArg  q1 
)
staticnoexcept

Performs multiplication on two quaternions.

Parameters
[in]q0A quaternion.
[in]q1A quaternion.
Returns
Returns q1 * q0. (Not a typo.)
Description
The result of the computation corresponds to the quaternion that is the compound of rotation q1 after rotation q0.
The pseudocode is shown below.
vector v = { q1.w, q1.x, q1.y, q1.z };
matrix m;
m.row[0] = { q0.x, q0.y, q0.z, q0.w };
m.row[1] = { q0.w, -q0.z, q0.y, -q0.x };
m.row[2] = { q0.z, q0.w, -q0.x, -q0.y };
m.row[3] = { -q0.y, q0.x, q0.w, -q0.z };
return v * m;
nn::nlib::simd::Quaternion::Normalize ( SimdQuaternionArg  q)
staticnoexcept

Normalizes a quaternion.

Parameters
[in]qA quaternion.
Returns
The normalized quaternion.
nn::nlib::simd::Quaternion::NormalizeEst ( SimdQuaternionArg  q)
staticnoexcept

Normalizes a quaternion with relatively low precision.

Parameters
[in]qA quaternion.
Returns
The normalized quaternion.
nn::nlib::simd::Quaternion::RecpLength ( SimdQuaternionArg  q)
staticnoexcept

Returns the reciprocal of the size of a quaternion.

Parameters
[in]qA quaternion.
Returns
The reciprocal of the size of a quaternion is stored in each lane.
nn::nlib::simd::Quaternion::Slerp ( SimdQuaternionArg  q0_normalized,
SimdQuaternionArg  q1_normalized,
float  t 
)
staticnoexcept

Performs spherical linear interpolation on quaternions.

Parameters
[in]q0_normalizedA normalized quaternion.
[in]q1_normalizedA normalized quaternion.
[in]tInterpolation factor.
Returns
The interpolated quaternion.
Description
The function returns q0_normalized if t is 0, and q1_normalized if t is 1.
nn::nlib::simd::Quaternion::Squad ( SimdQuaternionArg  q0_normalized,
SimdQuaternionArg  q1_normalized,
SimdQuaternionArg  q2_normalized,
SimdQuaternionArg  q3_normalized,
float  t 
)
staticnoexcept

Performs spherical quadrangle interpolation (squad) on quaternions.

Parameters
[in]q0_normalizedA normalized quaternion.
[in]q1_normalizedA normalized quaternion.
[in]q2_normalizedA normalized quaternion.
[in]q3_normalizedA normalized quaternion.
[in]tInterpolation factor.
Returns
The interpolated quaternion.
nn::nlib::simd::Quaternion::SquadSetup ( SimdQuaternion a,
SimdQuaternion b,
SimdQuaternion c,
SimdQuaternionArg  q0,
SimdQuaternionArg  q1,
SimdQuaternionArg  q2,
SimdQuaternionArg  q3 
)
staticnoexcept

Calculates the quaternions for performing spherical quadrangle interpolation (squad) on quaternions.

Parameters
[out]aOutput quaternion.
[out]bOutput quaternion.
[out]cOutput quaternion.
[in]q0Input quaternion.
[in]q1Input quaternion.
[in]q2Input quaternion.
[in]q3Input quaternion.
Description
Use this function when there are more than four quaternions to interpolate.
The calculation results are used in interpolation as shown below.
q = Quaternion::Squad(q1, *a, *b, *c, t);
nn::nlib::simd::Quaternion::ToAxisAngle ( float *  rad,
SimdQuaternion  q 
)
staticnoexcept

Calculates the rotation axis vector and the rotation angle in radians from the quaternion.

Parameters
[out]radThe rotation angle.
[in]qA quaternion.
Returns
The three-dimensional vector that is the axis of rotation.

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