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

#include <Rotation.h>

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

Public Member Functions

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

Static Public Member Functions

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

Additional Inherited Members

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

Constructor & Destructor Documentation

◆ TRotation() [1/5]

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

◆ TRotation() [2/5]

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

◆ TRotation() [3/5]

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

◆ TRotation() [4/5]

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

◆ TRotation() [5/5]

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

Member Function Documentation

◆ CalculateAngularDelta()

static TVector< FRealSingle, 3 > Chaos::TRotation< FRealSingle, 3 >::CalculateAngularDelta ( const TRotation< FRealSingle, 3 > &  InR0,
const TRotation< FRealSingle, 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< FRealSingle, 3 > Chaos::TRotation< FRealSingle, 3 >::CalculateAngularVelocity ( const TRotation< FRealSingle, 3 > &  InR0,
const TRotation< FRealSingle, 3 > &  InR1,
const FRealSingle  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()

TVector< FRealSingle, 3 > Chaos::TRotation< FRealSingle, 3 >::CalculateAngularVelocity1 ( const TRotation< FRealSingle, 3 > &  R0,
const TRotation< FRealSingle, 3 > &  InR1,
const FRealSingle  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< FRealSingle, 3 > Chaos::TRotation< FRealSingle, 3 >::CalculateAngularVelocity2 ( const TRotation< FRealSingle, 3 > &  R0,
const TRotation< FRealSingle, 3 > &  InR1,
const FRealSingle  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()

TRotation< FRealSingle, 3 > Chaos::TRotation< FRealSingle, 3 >::Conjugate ( const ::Chaos::TRotation< FRealSingle, 3 > &  InR)
static

Return the complex conjugate of the rotation

◆ DotProduct()

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

Return the dot product of two quaternions.

◆ FromAxisAngle()

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

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

◆ FromElements() [1/2]

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

Create a rotation by explicitly specifying all elements

◆ FromElements() [2/2]

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

Create a rotation by explicitly specifying all elements

◆ FromIdentity()

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

Create an identity rotation

◆ FromRotatedVector()

static CHAOSCORE_API TRotation< FRealSingle, 3 > Chaos::TRotation< FRealSingle, 3 >::FromRotatedVector ( const ::Chaos::TVector< FRealSingle, 3 > &  InitialVector,
const ::Chaos::TVector< FRealSingle, 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 FRealSingle Chaos::TRotation< FRealSingle, 3 >::GetAbsMax ( ) const
inline

Return the large absolute element value.

◆ GetRotationAxisSafe()

bool Chaos::TRotation< FRealSingle, 3 >::GetRotationAxisSafe ( TVector< FRealSingle, 3 > &  OutAxis,
const TVector< FRealSingle, 3 > &  DefaultAxis,
FRealSingle  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()

TRotation< FRealSingle, 3 > Chaos::TRotation< FRealSingle, 3 >::IntegrateRotationWithAngularVelocity ( const TRotation< FRealSingle, 3 > &  InR0,
const TVector< FRealSingle, 3 > &  InW,
const FRealSingle  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< FRealSingle, 3 >::IsNearlyEqual ( const TRotation< FRealSingle, 3 > &  A,
const TRotation< FRealSingle, 3 > &  B,
const FRealSingle  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< FRealSingle, 3 >::ToAxisAndAngleSafe ( TVector< FRealSingle, 3 > &  OutAxis,
FRealSingle OutAngle,
const TVector< FRealSingle, 3 > &  DefaultAxis,
FRealSingle  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< FRealSingle, 3, 3 > Chaos::TRotation< FRealSingle, 3 >::ToMatrix ( ) const
inline

◆ ToMatrixAxes()

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

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

◆ ToSwingTwistX()

void Chaos::TRotation< FRealSingle, 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 files: