25template<
typename T,
typename =
void>
30 decltype(FMath::Lerp(std::declval<T>(), std::declval<T>(), 0.5f)),
31 decltype(std::declval<T>() + std::declval<T>()),
32 decltype(std::declval<T>() * std::declval<float>())
33 >> : std::true_type {};
70 Result = Result + (*
Window[i] * Basis[i]);
116 if (Parameter <= 0.0f)
return *
Window[0];
117 if (Parameter >= 1.0f)
return *
Window[1];
120 const float Start =
static_cast<float>(*
Window[0]);
121 const float End =
static_cast<float>(*
Window[1]);
122 const float Result = Start + Parameter * (
End - Start);
125 return FMath::RoundToInt(Result);
133 Result +=
static_cast<float>(*
Window[i]) * Basis[i];
135 return FMath::RoundToInt(Result);
139 template<
int32 Order>
173 LinearColors.
Add(*Color);
180 Result += LinearColors[i] * Basis[i];
188 template<
int32 Order>
200template <
typename RealType>
230 RealType M[4][4] = {};
231 RealType TotalWeight = 0;
235 const RealType
Weight =
static_cast<RealType
>(Basis[
Index]);
243 Quat *=
static_cast<RealType
>(-1);
248 for (
int32 Row = 0; Row < 4; ++Row)
269 for (
int32 Row = 0; Row < 4; ++Row)
278 RealType
EigenVec[4] = {0, 0, 0, 1};
281 constexpr int32 MaxIterations = 32;
282 for (
int32 Iter = 0; Iter < MaxIterations; ++Iter)
286 for (
int32 Row = 0; Row < 4; ++Row)
308 for (
int32 i = 0; i < 4; ++i)
315 for (
int32 Row = 0; Row < 4; ++Row)
346 template<
int32 Order>
358 RealType
base_h =
static_cast<RealType
>(0.01);
364 static_cast<RealType
>(0.001),
365 static_cast<RealType
>(0.1)
369 return (
Q1 *
Q0.Inverse()).Log() * (
static_cast<RealType
>(1) / h);
375 RealType
base_h =
static_cast<RealType
>(0.01);
380 diff /
static_cast<RealType
>(2),
381 static_cast<RealType
>(0.001),
382 static_cast<RealType
>(0.1)
387 return (V1 * V0.Inverse()).Log() * (
static_cast<RealType
>(1) / (
static_cast<RealType
>(2) * h));
411 Result.SetLocation(
FMath::Lerp(
A.GetLocation(),
B.GetLocation(), Parameter));
412 Result.SetRotation(
FQuat::Slerp(
A.GetRotation(),
B.GetRotation(), Parameter));
413 Result.SetScale3D(
FMath::Lerp(
A.GetScale3D(),
B.GetScale3D(), Parameter));
421 if (
Window.Num() == 0 || Basis.
Num() == 0)
436 const float Weight = Basis[i];
459 template<
int32 Order>
478 Translations[i] =
Window[i]->GetTranslation();
479 Rotations[i] =
Window[i]->GetRotation();
480 Scales[i] =
Window[i]->GetScale3D();
498template <
typename T,
int32 Order>
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define FVector
Definition IOSSystemIncludes.h:8
UE::Math::TTransform< double > FTransform
Definition MathFwd.h:53
#define UE_SMALL_NUMBER
Definition UnrealMathUtility.h:130
#define UE_KINDA_SMALL_NUMBER
Definition UnrealMathUtility.h:131
Definition ArrayView.h:139
UE_FORCEINLINE_HINT constexpr SizeType Num() const
Definition ArrayView.h:380
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT ElementType * GetData() UE_LIFETIMEBOUND
Definition Array.h:1027
void SetNum(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2308
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
static FLinearColor Interpolate(TArrayView< const FLinearColor *const > Window, float Parameter)
Definition InterpolationPolicies.h:155
static FLinearColor InterpolateWithBasis(TArrayView< const FLinearColor *const > Window, TArrayView< const float > Basis)
Definition InterpolationPolicies.h:166
static FLinearColor EvaluateDerivative(TArrayView< const FLinearColor *const > Window, float Parameter)
Definition InterpolationPolicies.h:189
static TQuat EvaluateDerivative(TArrayView< const TQuat *const > Window, float Parameter)
Definition InterpolationPolicies.h:347
static TQuat Interpolate(TArrayView< const TQuat *const > Window, float Parameter)
Definition InterpolationPolicies.h:206
static TQuat InterpolateWithBasis(TArrayView< const TQuat *const > Window, TArrayView< const float > Basis)
Definition InterpolationPolicies.h:218
static int32 EvaluateDerivative(TArrayView< const int32 *const > Window, float Parameter)
Definition InterpolationPolicies.h:140
static int32 Interpolate(TArrayView< const int32 *const > Window, float Parameter)
Definition InterpolationPolicies.h:108
static int32 InterpolateWithBasis(TArrayView< const int32 *const > Window, TArrayView< const float > Basis)
Definition InterpolationPolicies.h:128
Definition InterpolationPolicies.h:40
static T Interpolate(TArrayView< const T *const > Window, float Parameter)
Definition InterpolationPolicies.h:43
static T EvaluateDerivative(TArrayView< const T *const > Window, float Parameter)
Definition InterpolationPolicies.h:83
static T InterpolateWithBasis(TArrayView< const T *const > Window, TArrayView< const float > Basis)
Definition InterpolationPolicies.h:61
Definition AdvancedWidgetsModule.cpp:13
U16 Index
Definition radfft.cpp:71
static CORE_API const FLinearColor Black
Definition Color.h:458
static CORE_API FLinearColor LerpUsingHSV(const FLinearColor &From, const FLinearColor &To, const float Progress)
Definition Color.cpp:445
FColor ToFColor(const bool bSRGB) const
Definition Color.h:810
static UE_FORCEINLINE_HINT bool IsNearlyEqual(float A, float B, float ErrorTolerance=UE_SMALL_NUMBER)
Definition UnrealMathUtility.h:388
static constexpr UE_FORCEINLINE_HINT T Lerp(const T &A, const T &B, const U &Alpha)
Definition UnrealMathUtility.h:1116
static constexpr UE_FORCEINLINE_HINT T Clamp(const T X, const T MinValue, const T MaxValue)
Definition UnrealMathUtility.h:592
static UE_FORCEINLINE_HINT bool IsNearlyZero(float Value, float ErrorTolerance=UE_SMALL_NUMBER)
Definition UnrealMathUtility.h:407
static T Compute(TArrayView< const T *const > Window, float Parameter)
Definition SplineMath.h:460
Definition InterpolationPolicies.h:500
static T Compute(TArrayView< const T *const > Window, float Parameter)
Definition InterpolationPolicies.h:501
Definition InterpolationPolicies.h:26
static UE_FORCEINLINE_HINT TQuat< T > Slerp(const TQuat< T > &Quat1, const TQuat< T > &Quat2, T Slerp)
Definition Quat.h:660
static CORE_API const TQuat< T > Identity
Definition Quat.h:63
static CORE_API const TVector< double > ZeroVector
Definition Vector.h:79