ProtoTracer  1.0
Real-time 3D rendering and animation engine
Loading...
Searching...
No Matches
Quaternion Class Reference

A mathematical construct representing a rotation in 3D space. More...

#include <Quaternion.h>

Public Member Functions

 Quaternion ()
 Default constructor. Initializes the quaternion to identity (1,0,0,0).
 
 Quaternion (const Quaternion &quaternion)
 Copy constructor. Clones the values of another quaternion.
 
 Quaternion (const Vector3D &vector)
 Constructs a quaternion purely from a 3D vector (0, X, Y, Z).
 
 Quaternion (const float &w, const float &x, const float &y, const float &z)
 Constructs a quaternion with individual scalar and vector components.
 
Vector2D RotateVector (const Vector2D &v) const
 Rotates a 2D vector by this quaternion, projecting it in 2D.
 
Vector2D RotateVectorUnit (const Vector2D &v, const Quaternion &q) const
 Rotates a 2D vector by a unit quaternion (assumes normalized), allowing a different quaternion to be used if desired.
 
Vector2D UnrotateVector (const Vector2D &coordinate) const
 Applies the inverse of this quaternion's rotation to a 2D vector.
 
Vector3D RotateVector (const Vector3D &v) const
 Rotates a 3D vector by this quaternion.
 
Vector3D UnrotateVector (const Vector3D &coordinate) const
 Applies the inverse of this quaternion's rotation to a 3D vector.
 
Vector3D GetBiVector () const
 Retrieves the bi-vector (X, Y, Z) portion of the quaternion (with W=0).
 
Vector3D GetNormal () const
 Retrieves the normal vector part of the quaternion, typically its axis of rotation.
 
Quaternion DeltaRotation (const Vector3D &angularVelocity, const float &timeDelta) const
 Computes a small rotation quaternion given an angular velocity and time delta.
 
Quaternion Add (const Quaternion &quaternion) const
 Adds two quaternions component-wise.
 
Quaternion Subtract (const Quaternion &quaternion) const
 Subtracts a quaternion from this quaternion component-wise.
 
Quaternion Multiply (const Quaternion &quaternion) const
 Multiplies (composes) this quaternion with another (order matters).
 
Quaternion Multiply (const float &scalar) const
 Scales this quaternion by a scalar factor.
 
Quaternion Divide (const Quaternion &quaternion) const
 Divides this quaternion by another quaternion component-wise (not a typical quaternion operation).
 
Quaternion Divide (const float &scalar) const
 Divides this quaternion by a scalar.
 
Quaternion Power (const Quaternion &exponent) const
 Raises this quaternion to the power of another quaternion (component-wise).
 
Quaternion Power (const float &exponent) const
 Raises this quaternion to a scalar power.
 
Quaternion Permutate (const Vector3D &permutation) const
 Performs a permutation operation using a 3D vector (custom transform).
 
Quaternion Absolute () const
 Returns a quaternion where each component is the absolute value of the original.
 
Quaternion AdditiveInverse () const
 Negates each component (an additive inverse).
 
Quaternion MultiplicativeInverse () const
 Returns the multiplicative inverse of this quaternion, such that q * q^-1 = identity.
 
Quaternion Conjugate () const
 Returns the conjugate of this quaternion (W stays the same, X/Y/Z get negated).
 
Quaternion UnitQuaternion () const
 Returns a unit quaternion (normalized) version of this quaternion.
 
float Magnitude () const
 Computes the magnitude (length) of this quaternion.
 
float DotProduct (const Quaternion &q) const
 Computes the dot product between this quaternion and another.
 
float Normal () const
 Computes the quaternion's norm (equivalent to squared magnitude).
 
bool IsNaN () const
 Checks if any component of this quaternion is NaN.
 
bool IsFinite () const
 Checks if all components are finite.
 
bool IsInfinite () const
 Checks if any component is infinite.
 
bool IsNonZero () const
 Checks if the quaternion is non-zero (i.e., any component != 0).
 
bool IsEqual (const Quaternion &quaternion) const
 Checks if two quaternions are exactly equal (component-wise).
 
bool IsClose (const Quaternion &quaternion, const float &epsilon) const
 Checks if two quaternions are nearly equal within a tolerance.
 
String ToString () const
 Converts this quaternion to a string representation (e.g. "(W, X, Y, Z)").
 
bool operator== (const Quaternion &quaternion) const
 Equality operator. Checks if two quaternions match exactly (component-wise).
 
bool operator!= (const Quaternion &quaternion) const
 Inequality operator. Checks if two quaternions differ in any component.
 
Quaternion operator= (const Quaternion &quaternion)
 Assignment operator. Copies another quaternion's components to this one.
 
Quaternion operator+ (const Quaternion &quaternion) const
 Adds two quaternions (component-wise).
 
Quaternion operator- (const Quaternion &quaternion) const
 Subtracts one quaternion from another (component-wise).
 
Quaternion operator* (const Quaternion &quaternion) const
 Multiplies (composes) two quaternions.
 
Quaternion operator/ (const Quaternion &quaternion) const
 Divides this quaternion by another quaternion, component-wise.
 
Quaternion operator/ (const float &value) const
 Divides this quaternion by a scalar.
 

Static Public Member Functions

static Quaternion SphericalInterpolation (const Quaternion &q1, const Quaternion &q2, const float &ratio)
 Performs spherical linear interpolation (slerp) between two quaternions.
 
static Quaternion Add (const Quaternion &q1, const Quaternion &q2)
 Static convenience function: Adds two quaternions.
 
static Quaternion Subtract (const Quaternion &q1, const Quaternion &q2)
 Static convenience function: Subtracts one quaternion from another.
 
static Quaternion Multiply (const Quaternion &q1, const Quaternion &q2)
 Static convenience function: Multiplies (composes) two quaternions.
 
static Quaternion Divide (const Quaternion &q1, const Quaternion &q2)
 Static convenience function: Divides one quaternion by another (component-wise).
 
static Quaternion Power (const Quaternion &q1, const Quaternion &q2)
 Static convenience function: Raises one quaternion to the power of another (component-wise).
 
static float DotProduct (const Quaternion &q1, const Quaternion &q2)
 Static convenience function: Computes the dot product of two quaternions.
 
static Quaternion Power (const Quaternion &quaternion, const float &exponent)
 Static convenience function: Raises a quaternion to a scalar power.
 
static Quaternion Permutate (const Quaternion &quaternion, const Vector3D &vector)
 Static convenience function: Permutates a quaternion with a 3D vector input.
 
static Quaternion Absolute (const Quaternion &quaternion)
 Static convenience function: Returns a quaternion with absolute values of its components.
 
static Quaternion AdditiveInverse (const Quaternion &quaternion)
 Static convenience function: Returns the additive inverse of a quaternion.
 
static Quaternion MultiplicativeInverse (const Quaternion &quaternion)
 Static convenience function: Returns the multiplicative inverse of a quaternion.
 
static Quaternion Conjugate (const Quaternion &quaternion)
 Static convenience function: Returns the conjugate of a quaternion.
 
static Quaternion UnitQuaternion (const Quaternion &quaternion)
 Static convenience function: Normalizes a quaternion, returning a unit quaternion.
 
static float Magnitude (const Quaternion &quaternion)
 Static convenience function: Computes the magnitude of a quaternion.
 
static float Normal (const Quaternion &quaternion)
 Static convenience function: Computes the norm (squared magnitude) of a quaternion.
 

Public Attributes

float W
 Scalar part of the quaternion.
 
float X
 X component of the quaternion's vector part.
 
float Y
 Y component of the quaternion's vector part.
 
float Z
 Z component of the quaternion's vector part.
 

Friends

Quaternion operator* (const float &scalar, const Quaternion &q)
 Scalar multiplication operator (on the left).
 
Quaternion operator* (const Quaternion &q, const float &scalar)
 Scalar multiplication operator (on the right).
 

Detailed Description

A mathematical construct representing a rotation in 3D space.

Quaternions consist of a scalar part (W) and a vector part (X, Y, Z). They allow smooth interpolation (slerp), concatenation of rotations, and are often used to avoid gimbal lock problems that can occur when using Euler angles.

Definition at line 30 of file Quaternion.h.

Constructor & Destructor Documentation

◆ Quaternion() [1/4]

Default constructor. Initializes the quaternion to identity (1,0,0,0).

Definition at line 4 of file Quaternion.cpp.

Referenced by DeltaRotation(), Divide(), Divide(), MultiplicativeInverse(), Multiply(), Multiply(), Permutate(), RotateVector(), RotateVector(), RotateVectorUnit(), UnrotateVector(), and UnrotateVector().

◆ Quaternion() [2/4]

Quaternion ( const Quaternion quaternion)

Copy constructor. Clones the values of another quaternion.

Parameters
quaternionThe quaternion to copy from.

Definition at line 7 of file Quaternion.cpp.

References W, X, Y, and Z.

◆ Quaternion() [3/4]

Quaternion ( const Vector3D vector)

Constructs a quaternion purely from a 3D vector (0, X, Y, Z).

Parameters
vectorThe vector that forms the (X, Y, Z) part of the quaternion.

The W component is initialized to 0.0f.

Definition at line 15 of file Quaternion.cpp.

References W, X, Vector3D::X, Y, Vector3D::Y, Z, and Vector3D::Z.

◆ Quaternion() [4/4]

Quaternion ( const float w,
const float x,
const float y,
const float z 
)

Constructs a quaternion with individual scalar and vector components.

Parameters
wScalar (real) component.
xX component of the vector part.
yY component of the vector part.
zZ component of the vector part.

Definition at line 23 of file Quaternion.cpp.

References W, X, Y, and Z.

Member Function Documentation

◆ Absolute() [1/2]

Quaternion Absolute ( ) const

Returns a quaternion where each component is the absolute value of the original.

Returns
A quaternion with absolute-valued components.

Definition at line 292 of file Quaternion.cpp.

References W, X, Y, and Z.

◆ Absolute() [2/2]

Quaternion Absolute ( const Quaternion quaternion)
static

Static convenience function: Returns a quaternion with absolute values of its components.

Parameters
quaternionThe input quaternion.
Returns
A quaternion whose components are the absolute values of quaternion's components.

Definition at line 487 of file Quaternion.cpp.

◆ Add() [1/2]

Quaternion Add ( const Quaternion q1,
const Quaternion q2 
)
static

Static convenience function: Adds two quaternions.

Parameters
q1The first quaternion.
q2The second quaternion.
Returns
A new quaternion representing the sum.

Definition at line 455 of file Quaternion.cpp.

◆ Add() [2/2]

Quaternion Add ( const Quaternion quaternion) const

Adds two quaternions component-wise.

Parameters
quaternionThe quaternion to add to the current one.
Returns
A new quaternion representing the sum.

Definition at line 152 of file Quaternion.cpp.

References W, X, Y, and Z.

Referenced by QuaternionKalmanFilter::Filter(), and operator+().

◆ AdditiveInverse() [1/2]

Quaternion AdditiveInverse ( ) const

Negates each component (an additive inverse).

Returns
A quaternion representing -this.

Definition at line 302 of file Quaternion.cpp.

References W, X, Y, and Z.

◆ AdditiveInverse() [2/2]

Quaternion AdditiveInverse ( const Quaternion quaternion)
static

Static convenience function: Returns the additive inverse of a quaternion.

Parameters
quaternionThe input quaternion.
Returns
A quaternion representing -q.

Definition at line 491 of file Quaternion.cpp.

◆ Conjugate() [1/2]

Quaternion Conjugate ( ) const

Returns the conjugate of this quaternion (W stays the same, X/Y/Z get negated).

Returns
The conjugated quaternion.

Definition at line 322 of file Quaternion.cpp.

References W, X, Y, and Z.

Referenced by SerialInterpreter::GetOrientation(), ObjectAlign::GetTransform(), MultiplicativeInverse(), UnrotateVector(), and UnrotateVector().

◆ Conjugate() [2/2]

Quaternion Conjugate ( const Quaternion quaternion)
static

Static convenience function: Returns the conjugate of a quaternion.

Parameters
quaternionThe input quaternion.
Returns
A quaternion with (W, -X, -Y, -Z).

Definition at line 499 of file Quaternion.cpp.

◆ DeltaRotation()

Quaternion DeltaRotation ( const Vector3D angularVelocity,
const float timeDelta 
) const

Computes a small rotation quaternion given an angular velocity and time delta.

Parameters
angularVelocityA 3D vector representing the angular velocity (e.g., degrees/sec or radians/sec).
timeDeltaThe time step.
Returns
A new quaternion representing the rotation over the given time delta.

Definition at line 136 of file Quaternion.cpp.

References Mathematics::EPSILON, Quaternion(), UnitQuaternion(), W, X, Y, and Z.

Referenced by BNO055::Update().

◆ Divide() [1/3]

Quaternion Divide ( const float scalar) const

Divides this quaternion by a scalar.

Parameters
scalarThe scalar divisor.
Returns
A new quaternion scaled by the reciprocal of scalar.

Definition at line 240 of file Quaternion.cpp.

References Mathematics::EPSILON, Mathematics::IsClose(), Quaternion(), W, X, Y, and Z.

◆ Divide() [2/3]

Quaternion Divide ( const Quaternion q1,
const Quaternion q2 
)
static

Static convenience function: Divides one quaternion by another (component-wise).

Parameters
q1The first quaternion.
q2The second quaternion (divisor).
Returns
A new quaternion representing the division result.

Definition at line 467 of file Quaternion.cpp.

◆ Divide() [3/3]

Quaternion Divide ( const Quaternion quaternion) const

Divides this quaternion by another quaternion component-wise (not a typical quaternion operation).

Parameters
quaternionThe quaternion to divide by.
Returns
A new quaternion representing the component-wise result.

Definition at line 228 of file Quaternion.cpp.

References Mathematics::EPSILON, Quaternion(), W, X, Y, and Z.

Referenced by operator/(), and operator/().

◆ DotProduct() [1/2]

float DotProduct ( const Quaternion q) const

Computes the dot product between this quaternion and another.

Parameters
qAnother quaternion.
Returns
The dot product (W*W' + X*X' + Y*Y' + Z*Z').

Definition at line 349 of file Quaternion.cpp.

References W, X, Y, and Z.

◆ DotProduct() [2/2]

float DotProduct ( const Quaternion q1,
const Quaternion q2 
)
static

Static convenience function: Computes the dot product of two quaternions.

Parameters
q1The first quaternion.
q2The second quaternion.
Returns
The scalar dot product.

Definition at line 475 of file Quaternion.cpp.

◆ GetBiVector()

Vector3D GetBiVector ( ) const

Retrieves the bi-vector (X, Y, Z) portion of the quaternion (with W=0).

Returns
A 3D vector representing the (X, Y, Z) parts of this quaternion.

Definition at line 87 of file Quaternion.cpp.

References X, Y, and Z.

◆ GetNormal()

Vector3D GetNormal ( ) const

Retrieves the normal vector part of the quaternion, typically its axis of rotation.

Returns
A 3D vector representing the axis (X, Y, Z).

Definition at line 95 of file Quaternion.cpp.

References RotateVector().

◆ IsClose()

bool IsClose ( const Quaternion quaternion,
const float epsilon 
) const

Checks if two quaternions are nearly equal within a tolerance.

Parameters
quaternionThe quaternion to compare to.
epsilonThe tolerance for comparison.
Returns
true if each component differs by less than epsilon.

Definition at line 388 of file Quaternion.cpp.

References W, X, Y, and Z.

Referenced by RotateVector(), RotateVector(), RotateVectorUnit(), UnrotateVector(), and UnrotateVector().

◆ IsEqual()

bool IsEqual ( const Quaternion quaternion) const

Checks if two quaternions are exactly equal (component-wise).

Parameters
quaternionThe quaternion to compare to.
Returns
true if all components match exactly.

Definition at line 379 of file Quaternion.cpp.

References IsNaN(), W, X, Y, and Z.

Referenced by operator!=(), and operator==().

◆ IsFinite()

bool IsFinite ( ) const

Checks if all components are finite.

Returns
true if finite, otherwise false.

Definition at line 364 of file Quaternion.cpp.

References Mathematics::IsInfinite(), W, X, Y, and Z.

◆ IsInfinite()

bool IsInfinite ( ) const

Checks if any component is infinite.

Returns
true if infinite, otherwise false.

Definition at line 369 of file Quaternion.cpp.

References Mathematics::IsFinite(), W, X, Y, and Z.

◆ IsNaN()

bool IsNaN ( ) const

Checks if any component of this quaternion is NaN.

Returns
true if any component is NaN, otherwise false.

Definition at line 359 of file Quaternion.cpp.

References Mathematics::IsNaN(), W, X, Y, and Z.

Referenced by IsEqual().

◆ IsNonZero()

bool IsNonZero ( ) const

Checks if the quaternion is non-zero (i.e., any component != 0).

Returns
true if non-zero, otherwise false.

Definition at line 374 of file Quaternion.cpp.

References W, X, Y, and Z.

◆ Magnitude() [1/2]

float Magnitude ( ) const

Computes the magnitude (length) of this quaternion.

Returns
The magnitude (sqrt(W^2 + X^2 + Y^2 + Z^2)).

Definition at line 344 of file Quaternion.cpp.

References Normal(), and Mathematics::Sqrt().

◆ Magnitude() [2/2]

float Magnitude ( const Quaternion quaternion)
static

Static convenience function: Computes the magnitude of a quaternion.

Parameters
quaternionThe input quaternion.
Returns
The magnitude (length) of quaternion.

Definition at line 507 of file Quaternion.cpp.

◆ MultiplicativeInverse() [1/2]

Quaternion MultiplicativeInverse ( ) const

Returns the multiplicative inverse of this quaternion, such that q * q^-1 = identity.

Returns
The multiplicative inverse.

Definition at line 312 of file Quaternion.cpp.

References Conjugate(), Mathematics::EPSILON, Mathematics::IsClose(), Multiply(), Normal(), and Quaternion().

Referenced by BoundaryCube::Update(), and BoundarySphere::Update().

◆ MultiplicativeInverse() [2/2]

Quaternion MultiplicativeInverse ( const Quaternion quaternion)
static

Static convenience function: Returns the multiplicative inverse of a quaternion.

Parameters
quaternionThe input quaternion.
Returns
A quaternion such that q * q^-1 = identity.

Definition at line 495 of file Quaternion.cpp.

◆ Multiply() [1/3]

Quaternion Multiply ( const float scalar) const

Scales this quaternion by a scalar factor.

Parameters
scalarThe scalar to multiply.
Returns
A new quaternion scaled by scalar.

Definition at line 215 of file Quaternion.cpp.

References Mathematics::EPSILON, Mathematics::IsClose(), Quaternion(), W, X, Y, and Z.

◆ Multiply() [2/3]

Quaternion Multiply ( const Quaternion q1,
const Quaternion q2 
)
static

Static convenience function: Multiplies (composes) two quaternions.

Parameters
q1The first quaternion.
q2The second quaternion.
Returns
The resulting quaternion composition.

Definition at line 463 of file Quaternion.cpp.

◆ Multiply() [3/3]

Quaternion Multiply ( const Quaternion quaternion) const

Multiplies (composes) this quaternion with another (order matters).

Parameters
quaternionThe right-hand side quaternion.
Returns
The resulting quaternion from the multiplication.

Definition at line 172 of file Quaternion.cpp.

References Mathematics::EPSILON, Quaternion(), W, X, Y, and Z.

Referenced by SerialInterpreter::GetOrientation(), ObjectAlign::GetTransform(), MultiplicativeInverse(), operator*(), Rasterizer::Rasterize(), Triangle2D::Triangle2D(), BoundaryCube::Update(), and BoundarySphere::Update().

◆ Normal() [1/2]

float Normal ( ) const

Computes the quaternion's norm (equivalent to squared magnitude).

Returns
(W^2 + X^2 + Y^2 + Z^2).

Definition at line 354 of file Quaternion.cpp.

References Mathematics::Sqrt(), W, X, Y, and Z.

Referenced by Magnitude(), MultiplicativeInverse(), and UnitQuaternion().

◆ Normal() [2/2]

float Normal ( const Quaternion quaternion)
static

Static convenience function: Computes the norm (squared magnitude) of a quaternion.

Parameters
quaternionThe input quaternion.
Returns
The squared length of quaternion.

Definition at line 511 of file Quaternion.cpp.

◆ operator!=()

bool operator!= ( const Quaternion quaternion) const

Inequality operator. Checks if two quaternions differ in any component.

Parameters
quaternionThe quaternion to compare.
Returns
true if not equal, otherwise false.

Definition at line 410 of file Quaternion.cpp.

References IsEqual().

◆ operator*()

Quaternion operator* ( const Quaternion quaternion) const

Multiplies (composes) two quaternions.

Parameters
quaternionThe right-hand side quaternion.
Returns
A new quaternion representing the multiplication result.

Definition at line 431 of file Quaternion.cpp.

References Multiply().

◆ operator+()

Quaternion operator+ ( const Quaternion quaternion) const

Adds two quaternions (component-wise).

Parameters
quaternionThe right-hand side quaternion to add.
Returns
A new quaternion representing the sum.

Definition at line 423 of file Quaternion.cpp.

References Add().

◆ operator-()

Quaternion operator- ( const Quaternion quaternion) const

Subtracts one quaternion from another (component-wise).

Parameters
quaternionThe right-hand side quaternion to subtract.
Returns
A new quaternion representing the difference.

Definition at line 427 of file Quaternion.cpp.

References Subtract().

◆ operator/() [1/2]

Quaternion operator/ ( const float value) const

Divides this quaternion by a scalar.

Parameters
valueThe scalar divisor.
Returns
A new quaternion scaled by 1.0 / value.

Definition at line 439 of file Quaternion.cpp.

References Divide().

◆ operator/() [2/2]

Quaternion operator/ ( const Quaternion quaternion) const

Divides this quaternion by another quaternion, component-wise.

Parameters
quaternionThe right-hand side quaternion divisor.
Returns
A new quaternion after division.

Definition at line 435 of file Quaternion.cpp.

References Divide().

◆ operator=()

Quaternion operator= ( const Quaternion quaternion)

Assignment operator. Copies another quaternion's components to this one.

Parameters
quaternionThe quaternion to copy.
Returns
A reference to this quaternion.

Definition at line 414 of file Quaternion.cpp.

References W, X, Y, and Z.

◆ operator==()

bool operator== ( const Quaternion quaternion) const

Equality operator. Checks if two quaternions match exactly (component-wise).

Parameters
quaternionThe quaternion to compare.
Returns
true if equal, otherwise false.

Definition at line 406 of file Quaternion.cpp.

References IsEqual().

◆ Permutate() [1/2]

Quaternion Permutate ( const Quaternion quaternion,
const Vector3D vector 
)
static

Static convenience function: Permutates a quaternion with a 3D vector input.

Parameters
quaternionThe base quaternion.
vectorA 3D vector used for permutation.
Returns
The permuted quaternion.

Definition at line 483 of file Quaternion.cpp.

◆ Permutate() [2/2]

Quaternion Permutate ( const Vector3D permutation) const

Performs a permutation operation using a 3D vector (custom transform).

Parameters
permutationA vector used for permuting the quaternion's components.
Returns
The permuted quaternion.

Definition at line 276 of file Quaternion.cpp.

References Quaternion(), W, X, Y, and Z.

◆ Power() [1/4]

Quaternion Power ( const float exponent) const

Raises this quaternion to a scalar power.

Parameters
exponentThe exponent (e.g., 2.0f).
Returns
A new quaternion representing this^exponent.

Definition at line 266 of file Quaternion.cpp.

References Mathematics::Pow(), W, X, Y, and Z.

◆ Power() [2/4]

Quaternion Power ( const Quaternion exponent) const

Raises this quaternion to the power of another quaternion (component-wise).

Parameters
exponentThe quaternion exponent.
Returns
A new quaternion representing the powered result.

Definition at line 256 of file Quaternion.cpp.

References Mathematics::Pow(), W, X, Y, and Z.

◆ Power() [3/4]

Quaternion Power ( const Quaternion q1,
const Quaternion q2 
)
static

Static convenience function: Raises one quaternion to the power of another (component-wise).

Parameters
q1The base quaternion.
q2The exponent quaternion.
Returns
A new quaternion representing the power result.

Definition at line 471 of file Quaternion.cpp.

◆ Power() [4/4]

Quaternion Power ( const Quaternion quaternion,
const float exponent 
)
static

Static convenience function: Raises a quaternion to a scalar power.

Parameters
quaternionThe base quaternion.
exponentThe scalar exponent.
Returns
A new quaternion representing the power result.

Definition at line 479 of file Quaternion.cpp.

◆ RotateVector() [1/2]

Vector2D RotateVector ( const Vector2D v) const

Rotates a 2D vector by this quaternion, projecting it in 2D.

This method uses quaternion-based rotation to transform a 2D vector.

Mathematical formulation:

\[ s_2 = 2 \cdot w \]

\[ d_{PUV} = 2 \cdot (x \cdot v_x + y \cdot v_y) \]

\[ d_{PUU} = w^2 - (x^2 + y^2 + z^2) \]

The rotated vector is computed as:

\[ v'_x = x \cdot d_{PUV} + v_x \cdot d_{PUU} + (-z \cdot v_y) \cdot s_2 \]

\[ v'_y = y \cdot d_{PUV} + v_y \cdot d_{PUU} + (z \cdot v_x) \cdot s_2 \]

Resulting in:

\[ \vec{v'} = (v'_x, v'_y) \]

Parameters
vThe 2D vector to rotate.
Returns
A new 2D vector that has been rotated.
Note
If the quaternion is close to zero (no rotation), the input vector is returned unchanged.

Definition at line 31 of file Quaternion.cpp.

References Mathematics::EPSILON, IsClose(), Quaternion(), UnitQuaternion(), X, and Y.

Referenced by ObjectAlign::AlignObjects(), ObjectAlign::AlignObjectsNoScale(), GetNormal(), ObjectAlign::GetObjectPlanarityRatio(), SpiralMaterial::GetRGB(), Rotation::GetRotationMatrix(), ObjectAlign::GetTransform(), UnrotateVector(), UnrotateVector(), BoundaryCube::Update(), BoundarySphere::Update(), and Object3D::UpdateTransform().

◆ RotateVector() [2/2]

Vector3D RotateVector ( const Vector3D v) const

Rotates a 3D vector by this quaternion.

Parameters
vThe 3D vector to rotate.
Returns
A new 3D vector that has been rotated.

Definition at line 68 of file Quaternion.cpp.

References Mathematics::EPSILON, IsClose(), Quaternion(), and UnitQuaternion().

◆ RotateVectorUnit()

Vector2D RotateVectorUnit ( const Vector2D v,
const Quaternion q 
) const

Rotates a 2D vector by a unit quaternion (assumes normalized), allowing a different quaternion to be used if desired.

Parameters
vThe 2D vector to rotate.
qThe (unit) quaternion to apply for the rotation.
Returns
A new 2D vector that has been rotated using q.

Definition at line 47 of file Quaternion.cpp.

References Mathematics::EPSILON, IsClose(), Quaternion(), X, and Y.

◆ SphericalInterpolation()

Quaternion SphericalInterpolation ( const Quaternion q1,
const Quaternion q2,
const float ratio 
)
static

Performs spherical linear interpolation (slerp) between two quaternions.

Parameters
q1The start quaternion.
q2The end quaternion.
ratioA normalized value (0 to 1) indicating how far to interpolate from q1 to q2.
Returns
A new quaternion representing the slerped result.

Definition at line 100 of file Quaternion.cpp.

References Mathematics::EPSILON.

Referenced by QuaternionKalmanFilter::Filter(), and BNO055::Update().

◆ Subtract() [1/2]

Quaternion Subtract ( const Quaternion q1,
const Quaternion q2 
)
static

Static convenience function: Subtracts one quaternion from another.

Parameters
q1The first quaternion.
q2The second quaternion to subtract from q1.
Returns
A new quaternion representing the difference.

Definition at line 459 of file Quaternion.cpp.

◆ Subtract() [2/2]

Quaternion Subtract ( const Quaternion quaternion) const

Subtracts a quaternion from this quaternion component-wise.

Parameters
quaternionThe quaternion to subtract.
Returns
A new quaternion representing the difference.

Definition at line 162 of file Quaternion.cpp.

References W, X, Y, and Z.

Referenced by operator-().

◆ ToString()

String ToString ( ) const

Converts this quaternion to a string representation (e.g. "(W, X, Y, Z)").

Returns
A String displaying the quaternion's components.

Definition at line 396 of file Quaternion.cpp.

References Mathematics::DoubleToCleanString(), W, X, Y, and Z.

◆ UnitQuaternion() [1/2]

Quaternion UnitQuaternion ( ) const

Returns a unit quaternion (normalized) version of this quaternion.

Returns
A normalized quaternion.

Definition at line 332 of file Quaternion.cpp.

References Normal(), W, X, Y, and Z.

Referenced by CameraLayout::CalculateTransform(), DeltaRotation(), Rotation::DirectionAngleToQuaternion(), QuaternionKalmanFilter::Filter(), Rotation::GetDirectionAngle(), RotateVector(), RotateVector(), UnrotateVector(), and BNO055::Update().

◆ UnitQuaternion() [2/2]

Quaternion UnitQuaternion ( const Quaternion quaternion)
static

Static convenience function: Normalizes a quaternion, returning a unit quaternion.

Parameters
quaternionThe input quaternion.
Returns
A normalized quaternion.

Definition at line 503 of file Quaternion.cpp.

◆ UnrotateVector() [1/2]

Vector2D UnrotateVector ( const Vector2D coordinate) const

Applies the inverse of this quaternion's rotation to a 2D vector.

Parameters
coordinateThe 2D vector to transform.
Returns
The unrotated 2D vector.

Definition at line 61 of file Quaternion.cpp.

References Conjugate(), Mathematics::EPSILON, IsClose(), Quaternion(), and RotateVector().

Referenced by ObjectAlign::NormalizeObjectPlane(), and Triangle2D::Triangle2D().

◆ UnrotateVector() [2/2]

Vector3D UnrotateVector ( const Vector3D coordinate) const

Applies the inverse of this quaternion's rotation to a 3D vector.

Parameters
coordinateThe 3D vector to transform.
Returns
The unrotated 3D vector.

Definition at line 80 of file Quaternion.cpp.

References Conjugate(), Mathematics::EPSILON, IsClose(), Quaternion(), RotateVector(), and UnitQuaternion().

Friends And Related Symbol Documentation

◆ operator* [1/2]

Quaternion operator* ( const float scalar,
const Quaternion q 
)
friend

Scalar multiplication operator (on the left).

Parameters
scalarThe scalar to multiply.
qThe quaternion to scale.
Returns
A new quaternion scaled by scalar.

Definition at line 444 of file Quaternion.cpp.

◆ operator* [2/2]

Quaternion operator* ( const Quaternion q,
const float scalar 
)
friend

Scalar multiplication operator (on the right).

Parameters
qThe quaternion to scale.
scalarThe scalar to multiply.
Returns
A new quaternion scaled by scalar.

Definition at line 448 of file Quaternion.cpp.

Member Data Documentation

◆ W

◆ X

◆ Y

◆ Z


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