UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Chaos::TRotation< FRealDouble, 3 > Class Reference

#include <Rotation.h>

+ Inheritance diagram for Chaos::TRotation< FRealDouble, 3 >:

Public Member Functions

 TRotation ()
 
 TRotation (const BaseQuat &Quat)
 
 TRotation (const FMatrix44d &Matrix)
 
 TRotation (const FMatrix44f &Matrix)
 
template<typename OtherType >
 TRotation (const UE::Math::TQuat< OtherType > &Other)
 
PMatrix< FRealDouble, 3, 3 > ToMatrix () const
 
bool ToAxisAndAngleSafe (TVector< FRealDouble, 3 > &OutAxis, FRealDouble &OutAngle, const TVector< FRealDouble, 3 > &DefaultAxis, FRealDouble EpsilionSq=1e-6f) const
 
bool GetRotationAxisSafe (TVector< FRealDouble, 3 > &OutAxis, const TVector< FRealDouble, 3 > &DefaultAxis, FRealDouble EpsilionSq=1e-6f) const
 
void ToMatrixAxes (TVector< FRealDouble, 3 > &OutX, TVector< FRealDouble, 3 > &OutY, TVector< FRealDouble, 3 > &OutZ)
 
void ToSwingTwistX (BaseQuat &OutSwing, BaseQuat &OutTwist) const
 
FORCEINLINE FRealDouble GetAbsMax () const
 Return the large absolute element value.
 
- Public Member Functions inherited from UE::Math::TQuat< FRealDouble >
 TQuat ()=default
 
UE_FORCEINLINE_HINT TQuat (EForceInit)
 
 TQuat (FRealDouble InX, FRealDouble InY, FRealDouble InZ, FRealDouble InW)
 
 TQuat (FRealDouble V)
 
 TQuat (const TRotator< FRealDouble > &R)
 
 TQuat (const TMatrix< FRealDouble > &M)
 
 TQuat (TVector< FRealDouble > Axis, FRealDouble AngleRad)
 
 TQuat (const TQuat< FArg > &From)
 
TQuat< FRealDouble > operator+ (const TQuat< FRealDouble > &Q) const
 
TQuat< FRealDouble > operator+= (const TQuat< FRealDouble > &Q)
 
TQuat< FRealDouble > operator- (const TQuat< FRealDouble > &Q) const
 
TQuat< FRealDouble > operator- () const
 
bool Equals (const TQuat< FRealDouble > &Q, FRealDouble Tolerance=UE_KINDA_SMALL_NUMBER) const
 
UE_FORCEINLINE_HINT bool IsIdentity (FRealDouble Tolerance=UE_SMALL_NUMBER) const
 
TQuat< FRealDouble > operator-= (const TQuat< FRealDouble > &Q)
 
TQuat< FRealDouble > operator* (const TQuat< FRealDouble > &Q) const
 
TVector< FRealDouble > operator* (const TVector< FRealDouble > &V) const
 
CORE_API TMatrix< FRealDouble > operator* (const TMatrix< FRealDouble > &M) const
 
TQuat< FRealDouble > operator* (const FArg Scale) const
 
TQuat< FRealDouble > operator*= (const TQuat< FRealDouble > &Q)
 
TQuat< FRealDouble > operator*= (const FArg Scale)
 
TQuat< FRealDouble > operator/= (const FArg Scale)
 
TQuat< FRealDouble > operator/ (const FArg Scale) const
 
bool Identical (const TQuat *Q, const uint32 PortFlags) const
 
bool operator== (const TQuat< FRealDouble > &Q) const
 
bool operator!= (const TQuat< FRealDouble > &Q) const
 
FRealDouble operator| (const TQuat< FRealDouble > &Q) const
 
CORE_API TVector< FRealDouble > Euler () const
 
void Normalize (FRealDouble Tolerance=UE_SMALL_NUMBER)
 
TQuat< FRealDouble > GetNormalized (FRealDouble Tolerance=UE_SMALL_NUMBER) const
 
bool IsNormalized () const
 
UE_FORCEINLINE_HINT FRealDouble Size () const
 
UE_FORCEINLINE_HINT FRealDouble SizeSquared () const
 
UE_FORCEINLINE_HINT FRealDouble GetAngle () const
 
void ToAxisAndAngle (TVector< FRealDouble > &Axis, float &Angle) const
 
void ToAxisAndAngle (TVector< FRealDouble > &Axis, double &Angle) const
 
TVector< FRealDouble > ToRotationVector () const
 
CORE_API void ToSwingTwist (const TVector< FRealDouble > &InTwistAxis, TQuat< FRealDouble > &OutSwing, TQuat< FRealDouble > &OutTwist) const
 
CORE_API FRealDouble GetTwistAngle (const TVector< FRealDouble > &TwistAxis) const
 
TVector< FRealDouble > RotateVector (TVector< FRealDouble > V) const
 
TVector< FRealDouble > UnrotateVector (TVector< FRealDouble > V) const
 
CORE_API TQuat< FRealDouble > Log () const
 
CORE_API TQuat< FRealDouble > Exp () const
 
TQuat< FRealDouble > Inverse () const
 
void EnforceShortestArcWith (const TQuat< FRealDouble > &OtherQuat)
 
TQuat< FRealDouble > GetShortestArcWith (const TQuat< FRealDouble > &OtherQuat) const
 
UE_FORCEINLINE_HINT TVector< FRealDouble > GetAxisX () const
 
UE_FORCEINLINE_HINT TVector< FRealDouble > GetAxisY () const
 
UE_FORCEINLINE_HINT TVector< FRealDouble > GetAxisZ () const
 
UE_FORCEINLINE_HINT TVector< FRealDouble > GetForwardVector () const
 
UE_FORCEINLINE_HINT TVector< FRealDouble > GetRightVector () const
 
UE_FORCEINLINE_HINT TVector< FRealDouble > GetUpVector () const
 
UE_FORCEINLINE_HINT TVector< FRealDouble > Vector () const
 
CORE_API TRotator< FRealDouble > Rotator () const
 
UE_FORCEINLINE_HINT TMatrix< FRealDouble > ToMatrix () const
 
CORE_API void ToMatrix (TMatrix< FRealDouble > &Mat) const
 
TVector< FRealDouble > GetRotationAxis () const
 
FRealDouble AngularDistance (const TQuat< FRealDouble > &Q) const
 
CORE_API bool NetSerialize (FArchive &Ar, class UPackageMap *Map, bool &bOutSuccess)
 
bool ContainsNaN () const
 
FString ToString () const
 
bool InitFromString (const FString &InSourceString)
 
UE_FORCEINLINE_HINT void DiagnosticCheckNaN () const
 
UE_FORCEINLINE_HINT void DiagnosticCheckNaN (const TCHAR *Message) const
 
TTuple< FRealDouble, FRealDouble, FRealDouble > ToLUFEuler () const
 
bool Serialize (FArchive &Ar)
 
bool SerializeFromMismatchedTag (FName StructTag, FArchive &Ar)
 

Static Public Member Functions

static FRealDouble DotProduct (const TRotation< FRealDouble, 3 > &L, const TRotation< FRealDouble, 3 > &R)
 Return the dot product of two quaternions.
 
static CHAOSCORE_API TRotation< FRealDouble, 3 > Conjugate (const ::Chaos::TRotation< FRealDouble, 3 > &InR)
 
static CHAOSCORE_API TRotation< FRealDouble, 3 > Negate (const ::Chaos::TRotation< FRealDouble, 3 > &InR)
 
static TRotation< FRealDouble, 3 > FromIdentity ()
 
static TRotation< FRealDouble, 3 > FromElements (const FRealDouble X, const FRealDouble Y, const FRealDouble Z, const FRealDouble W)
 
static TRotation< FRealDouble, 3 > FromElements (const ::Chaos::TVector< FRealDouble, 3 > &V, const FRealDouble W)
 
static TRotation< FRealDouble, 3 > FromAxisAngle (const ::Chaos::TVector< FRealDouble, 3 > &Axis, const FRealDouble AngleRad)
 
static CHAOSCORE_API TRotation< FRealDouble, 3 > FromVector (const ::Chaos::TVector< FRealDouble, 3 > &V)
 
static CHAOSCORE_API TRotation< FRealDouble, 3 > FromRotatedVector (const ::Chaos::TVector< FRealDouble, 3 > &InitialVector, const ::Chaos::TVector< FRealDouble, 3 > &FinalVector)
 
static CHAOSCORE_API TVector< FRealDouble, 3 > CalculateAngularVelocity1 (const TRotation< FRealDouble, 3 > &R0, const TRotation< FRealDouble, 3 > &InR1, const FRealDouble InDt)
 
static CHAOSCORE_API TVector< FRealDouble, 3 > CalculateAngularVelocity2 (const TRotation< FRealDouble, 3 > &R0, const TRotation< FRealDouble, 3 > &InR1, const FRealDouble InDt)
 
static TVector< FRealDouble, 3 > CalculateAngularVelocity (const TRotation< FRealDouble, 3 > &InR0, const TRotation< FRealDouble, 3 > &InR1, const FRealDouble InDt)
 
static TVector< FRealDouble, 3 > CalculateAngularDelta (const TRotation< FRealDouble, 3 > &InR0, const TRotation< FRealDouble, 3 > &InR1)
 
static CHAOSCORE_API TRotation< FRealDouble, 3 > IntegrateRotationWithAngularVelocity (const TRotation< FRealDouble, 3 > &InR0, const TVector< FRealDouble, 3 > &InW, const FRealDouble InDt)
 
static bool IsNearlyEqual (const TRotation< FRealDouble, 3 > &A, const TRotation< FRealDouble, 3 > &B, const FRealDouble Epsilon)
 
- Static Public Member Functions inherited from UE::Math::TQuat< FRealDouble >
static UE_FORCEINLINE_HINT TQuat< FRealDouble > MakeFromVectorRegister (QuatVectorRegister V)
 
static UE_FORCEINLINE_HINT TQuat< FRealDouble > MakeFromRotator (const TRotator< FRealDouble > &R)
 
static CORE_API TQuat< FRealDouble > MakeFromEuler (const TVector< FRealDouble > &Euler)
 
static TQuat< FRealDouble > MakeFromRotationVector (const TVector< FRealDouble > &RotationVector)
 
static UE_FORCEINLINE_HINT TQuat< FRealDouble > FindBetween (const TVector< FRealDouble > &Vector1, const TVector< FRealDouble > &Vector2)
 
static CORE_API TQuat< FRealDouble > FindBetweenNormals (const TVector< FRealDouble > &Normal1, const TVector< FRealDouble > &Normal2)
 
static CORE_API TQuat< FRealDouble > FindBetweenVectors (const TVector< FRealDouble > &Vector1, const TVector< FRealDouble > &Vector2)
 
static FRealDouble Error (const TQuat< FRealDouble > &Q1, const TQuat< FRealDouble > &Q2)
 
static FRealDouble ErrorAutoNormalize (const TQuat< FRealDouble > &A, const TQuat< FRealDouble > &B)
 
static TQuat< FRealDouble > FastLerp (const TQuat< FRealDouble > &A, const TQuat< FRealDouble > &B, const FRealDouble Alpha)
 
static TQuat< FRealDouble > FastBilerp (const TQuat< FRealDouble > &P00, const TQuat< FRealDouble > &P10, const TQuat< FRealDouble > &P01, const TQuat< FRealDouble > &P11, FRealDouble FracX, FRealDouble FracY)
 
static CORE_API TQuat< FRealDouble > Slerp_NotNormalized (const TQuat< FRealDouble > &Quat1, const TQuat< FRealDouble > &Quat2, FRealDouble Slerp)
 
static UE_FORCEINLINE_HINT TQuat< FRealDouble > Slerp (const TQuat< FRealDouble > &Quat1, const TQuat< FRealDouble > &Quat2, FRealDouble Slerp)
 
static CORE_API TQuat< FRealDouble > SlerpFullPath_NotNormalized (const TQuat< FRealDouble > &quat1, const TQuat< FRealDouble > &quat2, FRealDouble Alpha)
 
static UE_FORCEINLINE_HINT TQuat< FRealDouble > SlerpFullPath (const TQuat< FRealDouble > &quat1, const TQuat< FRealDouble > &quat2, FRealDouble Alpha)
 
static CORE_API TQuat< FRealDouble > Squad (const TQuat< FRealDouble > &quat1, const TQuat< FRealDouble > &tang1, const TQuat< FRealDouble > &quat2, const TQuat< FRealDouble > &tang2, FRealDouble Alpha)
 
static CORE_API TQuat< FRealDouble > SquadFullPath (const TQuat< FRealDouble > &quat1, const TQuat< FRealDouble > &tang1, const TQuat< FRealDouble > &quat2, const TQuat< FRealDouble > &tang2, FRealDouble Alpha)
 
static CORE_API void CalcTangents (const TQuat< FRealDouble > &PrevP, const TQuat< FRealDouble > &P, const TQuat< FRealDouble > &NextP, FRealDouble Tension, TQuat< FRealDouble > &OutTan)
 
static TQuat MakeFromLUFEuler (const TTuple< FRealDouble, FRealDouble, FRealDouble > &InLUFEuler)
 

Additional Inherited Members

- Public Types inherited from UE::Math::TQuat< FRealDouble >
using FReal = FRealDouble
 
using QuatVectorRegister = TVectorRegisterType< FRealDouble >
 
- Public Attributes inherited from UE::Math::TQuat< FRealDouble >
FRealDouble X
 
FRealDouble Y
 
FRealDouble Z
 
FRealDouble W
 
- Static Public Attributes inherited from UE::Math::TQuat< FRealDouble >
static CORE_API const TQuat< FRealDouble > Identity
 
- Protected Member Functions inherited from UE::Math::TQuat< FRealDouble >
 TQuat (QuatVectorRegister V)
 

Constructor & Destructor Documentation

◆ TRotation() [1/5]

Chaos::TRotation< FRealDouble, 3 >::TRotation ( )
inline

◆ TRotation() [2/5]

Chaos::TRotation< FRealDouble, 3 >::TRotation ( const BaseQuat Quat)
inline

◆ TRotation() [3/5]

Chaos::TRotation< FRealDouble, 3 >::TRotation ( const FMatrix44d Matrix)
inline

◆ TRotation() [4/5]

Chaos::TRotation< FRealDouble, 3 >::TRotation ( const FMatrix44f Matrix)
inline

◆ TRotation() [5/5]

template<typename OtherType >
Chaos::TRotation< FRealDouble, 3 >::TRotation ( const UE::Math::TQuat< OtherType > &  Other)
inline

Member Function Documentation

◆ CalculateAngularDelta()

static TVector< FRealDouble, 3 > Chaos::TRotation< FRealDouble, 3 >::CalculateAngularDelta ( const TRotation< FRealDouble, 3 > &  InR0,
const TRotation< FRealDouble, 3 > &  InR1 
)
inlinestatic

Calculate the axis-angle delta (angular velocity * dt) required to take an object with orientation R0 to orientation R1.

This should match the algorithm used in PerParticleUpdateFromDeltaPosition rule.

◆ CalculateAngularVelocity()

static TVector< FRealDouble, 3 > Chaos::TRotation< FRealDouble, 3 >::CalculateAngularVelocity ( const TRotation< FRealDouble, 3 > &  InR0,
const TRotation< FRealDouble, 3 > &  InR1,
const FRealDouble  InDt 
)
inlinestatic

Calculate the angular velocity required to take an object with orientation R0 to orientation R1 in time Dt.

This should match the algorithm used in PerParticleUpdateFromDeltaPosition rule.

◆ CalculateAngularVelocity1()

static CHAOSCORE_API TVector< FRealDouble, 3 > Chaos::TRotation< FRealDouble, 3 >::CalculateAngularVelocity1 ( const TRotation< FRealDouble, 3 > &  R0,
const TRotation< FRealDouble, 3 > &  InR1,
const FRealDouble  InDt 
)
static

Calculate the angular velocity required to take an object with orientation R0 to orientation R1 in time Dt.

Uses the relation: DQ/DT = (W * Q)/2

◆ CalculateAngularVelocity2()

static CHAOSCORE_API TVector< FRealDouble, 3 > Chaos::TRotation< FRealDouble, 3 >::CalculateAngularVelocity2 ( const TRotation< FRealDouble, 3 > &  R0,
const TRotation< FRealDouble, 3 > &  InR1,
const FRealDouble  InDt 
)
static

Calculate the angular velocity required to take an object with orientation R0 to orientation R1 in time Dt.

Uses the Quaternion to Axis/Angle method.

◆ Conjugate()

Return the complex conjugate of the rotation

◆ DotProduct()

static FRealDouble Chaos::TRotation< FRealDouble, 3 >::DotProduct ( const TRotation< FRealDouble, 3 > &  L,
const TRotation< FRealDouble, 3 > &  R 
)
inlinestatic

Return the dot product of two quaternions.

◆ FromAxisAngle()

static TRotation< FRealDouble, 3 > Chaos::TRotation< FRealDouble, 3 >::FromAxisAngle ( const ::Chaos::TVector< FRealDouble, 3 > &  Axis,
const FRealDouble  AngleRad 
)
inlinestatic

Create a rotation about an axis by an angle specified in radians

◆ FromElements() [1/2]

static TRotation< FRealDouble, 3 > Chaos::TRotation< FRealDouble, 3 >::FromElements ( const ::Chaos::TVector< FRealDouble, 3 > &  V,
const FRealDouble  W 
)
inlinestatic

Create a rotation by explicitly specifying all elements

◆ FromElements() [2/2]

static TRotation< FRealDouble, 3 > Chaos::TRotation< FRealDouble, 3 >::FromElements ( const FRealDouble  X,
const FRealDouble  Y,
const FRealDouble  Z,
const FRealDouble  W 
)
inlinestatic

Create a rotation by explicitly specifying all elements

◆ FromIdentity()

static TRotation< FRealDouble, 3 > Chaos::TRotation< FRealDouble, 3 >::FromIdentity ( )
inlinestatic

Create an identity rotation

◆ FromRotatedVector()

static CHAOSCORE_API TRotation< FRealDouble, 3 > Chaos::TRotation< FRealDouble, 3 >::FromRotatedVector ( const ::Chaos::TVector< FRealDouble, 3 > &  InitialVector,
const ::Chaos::TVector< FRealDouble, 3 > &  FinalVector 
)
static

Generate a Rotation that would rotate vector InitialVector to FinalVector

◆ FromVector()

Create a rotation about an axis V/|V| by angle |V| in radians

◆ GetAbsMax()

FORCEINLINE FRealDouble Chaos::TRotation< FRealDouble, 3 >::GetAbsMax ( ) const
inline

Return the large absolute element value.

◆ GetRotationAxisSafe()

bool Chaos::TRotation< FRealDouble, 3 >::GetRotationAxisSafe ( TVector< FRealDouble, 3 > &  OutAxis,
const TVector< FRealDouble, 3 > &  DefaultAxis,
FRealDouble  EpsilionSq = 1e-6f 
) const
inline

Extract the axis from the Quaternion.

Parameters
OutAxisThe axis of rotation.
DefaultAxisThe axis to set when the angle is too small to accurately calculate the axis.
EpsilonSqThe squared tolerance used to check for small angles.
Returns
Whether the axis was successfully calculated (true except for very small angles around or less than Epsilon).
Warning
The axis calculation cannot succeed for small angles due to numerical error. In this case, the function will return false, but set the axis to DefaultAxis.
Note
EpsilonSq is approximately the square of the angle below which we cannot calculate the axis. It needs to be "much greater" than square of the error in the quaternion values which is usually ~1e-4, so values around 1e-3^2 = 1e-6 or greater are about right.

◆ IntegrateRotationWithAngularVelocity()

static CHAOSCORE_API TRotation< FRealDouble, 3 > Chaos::TRotation< FRealDouble, 3 >::IntegrateRotationWithAngularVelocity ( const TRotation< FRealDouble, 3 > &  InR0,
const TVector< FRealDouble, 3 > &  InW,
const FRealDouble  InDt 
)
static

Return a new rotation equal to the input rotation with angular velocity W applied over time Dt.

Uses the relation: DQ/DT = (W * Q)/2

◆ IsNearlyEqual()

static bool Chaos::TRotation< FRealDouble, 3 >::IsNearlyEqual ( const TRotation< FRealDouble, 3 > &  A,
const TRotation< FRealDouble, 3 > &  B,
const FRealDouble  Epsilon 
)
inlinestatic

Check that two rotations are approximately equal. Assumes the quaternions are normalized and in the same hemisphere. For small values of Epsilon, this is approximately equivalent to checking that the rotations are within 2*Epsilon radians of each other.

◆ Negate()

Negate all values of the quaternion (note: not the inverse rotation. See Conjugate)

◆ ToAxisAndAngleSafe()

bool Chaos::TRotation< FRealDouble, 3 >::ToAxisAndAngleSafe ( TVector< FRealDouble, 3 > &  OutAxis,
FRealDouble OutAngle,
const TVector< FRealDouble, 3 > &  DefaultAxis,
FRealDouble  EpsilionSq = 1e-6f 
) const
inline

Extract the axis and angle from the Quaternion.

Parameters
OutAxisThe axis of rotation.
OutAngleThe angle of rotation about the axis (radians).
DefaultAxisThe axis to set when the angle is too small to accurately calculate the axis.
EpsilonSqThe squared tolerance used to check for small angles.
Returns
Whether the axis was successfully calculated (true except for very small angles around or less than Epsilon).
Warning
The axis calculation cannot succeed for small angles due to numerical error. In this case, the function will return false, but set the axis to DefaultAxis.
Note
EpsilonSq is approximately the square of the angle below which we cannot calculate the axis. It needs to be "much greater" than square of the error in the quaternion values which is usually ~1e-4, so values around 1e-3^2 = 1e-6 or greater are about right.

◆ ToMatrix()

PMatrix< FRealDouble, 3, 3 > Chaos::TRotation< FRealDouble, 3 >::ToMatrix ( ) const
inline

◆ ToMatrixAxes()

void Chaos::TRotation< FRealDouble, 3 >::ToMatrixAxes ( TVector< FRealDouble, 3 > &  OutX,
TVector< FRealDouble, 3 > &  OutY,
TVector< FRealDouble, 3 > &  OutZ 
)
inline

Convert to a matrix and return as the 3 matrix axes.

◆ ToSwingTwistX()

void Chaos::TRotation< FRealDouble, 3 >::ToSwingTwistX ( BaseQuat OutSwing,
BaseQuat OutTwist 
) const
inline

Extract the Swing and Twist rotations, assuming that the Twist Axis is (1,0,0). /see ToSwingTwist


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