14#ifndef ENABLE_NAN_DIAGNOSTIC
16 #define ENABLE_NAN_DIAGNOSTIC 1
18 #define ENABLE_NAN_DIAGNOSTIC 0
29template<
typename ElementType>
38#define UE_INCLUDETOOL_IGNORE_INCONSISTENT_STATE
41#ifndef UE_DEPRECATE_LEGACY_MATH_CONSTANT_MACRO_NAMES
42 #define UE_DEPRECATE_LEGACY_MATH_CONSTANT_MACRO_NAMES 0
46#ifndef UE_DEFINE_LEGACY_MATH_CONSTANT_MACRO_NAMES
47 #define UE_DEFINE_LEGACY_MATH_CONSTANT_MACRO_NAMES 1
57#if UE_DEFINE_LEGACY_MATH_CONSTANT_MACRO_NAMES
58 #if UE_DEPRECATE_LEGACY_MATH_CONSTANT_MACRO_NAMES
59 #define UE_PRIVATE_MATH_DEPRECATION(Before, After) UE_DEPRECATED_MACRO(5.1, "The " #Before " macro has been deprecated in favor of " #After ".")
61 #define UE_PRIVATE_MATH_DEPRECATION(Before, After)
65 #define PI UE_PRIVATE_MATH_DEPRECATION(PI , UE_PI ) UE_PI
66 #define SMALL_NUMBER UE_PRIVATE_MATH_DEPRECATION(SMALL_NUMBER , UE_SMALL_NUMBER ) UE_SMALL_NUMBER
67 #define KINDA_SMALL_NUMBER UE_PRIVATE_MATH_DEPRECATION(KINDA_SMALL_NUMBER , UE_KINDA_SMALL_NUMBER ) UE_KINDA_SMALL_NUMBER
68 #define BIG_NUMBER UE_PRIVATE_MATH_DEPRECATION(BIG_NUMBER , UE_BIG_NUMBER ) UE_BIG_NUMBER
69 #define EULERS_NUMBER UE_PRIVATE_MATH_DEPRECATION(EULERS_NUMBER , UE_EULERS_NUMBER ) UE_EULERS_NUMBER
70 #define FLOAT_NON_FRACTIONAL UE_PRIVATE_MATH_DEPRECATION(FLOAT_NON_FRACTIONAL , UE_FLOAT_NON_FRACTIONAL ) UE_FLOAT_NON_FRACTIONAL
71 #define DOUBLE_PI UE_PRIVATE_MATH_DEPRECATION(DOUBLE_PI , UE_DOUBLE_PI ) UE_DOUBLE_PI
72 #define DOUBLE_SMALL_NUMBER UE_PRIVATE_MATH_DEPRECATION(DOUBLE_SMALL_NUMBER , UE_DOUBLE_SMALL_NUMBER ) UE_DOUBLE_SMALL_NUMBER
73 #define DOUBLE_KINDA_SMALL_NUMBER UE_PRIVATE_MATH_DEPRECATION(DOUBLE_KINDA_SMALL_NUMBER , UE_DOUBLE_KINDA_SMALL_NUMBER ) UE_DOUBLE_KINDA_SMALL_NUMBER
74 #define DOUBLE_BIG_NUMBER UE_PRIVATE_MATH_DEPRECATION(DOUBLE_BIG_NUMBER , UE_DOUBLE_BIG_NUMBER ) UE_DOUBLE_BIG_NUMBER
75 #define DOUBLE_EULERS_NUMBER UE_PRIVATE_MATH_DEPRECATION(DOUBLE_EULERS_NUMBER , UE_DOUBLE_EULERS_NUMBER ) UE_DOUBLE_EULERS_NUMBER
76 #define DOUBLE_UE_GOLDEN_RATIO UE_PRIVATE_MATH_DEPRECATION(DOUBLE_UE_GOLDEN_RATIO , UE_DOUBLE_GOLDEN_RATIO ) UE_DOUBLE_GOLDEN_RATIO
77 #define DOUBLE_NON_FRACTIONAL UE_PRIVATE_MATH_DEPRECATION(DOUBLE_NON_FRACTIONAL , UE_DOUBLE_NON_FRACTIONAL ) UE_DOUBLE_NON_FRACTIONAL
78 #define MAX_FLT UE_PRIVATE_MATH_DEPRECATION(MAX_FLT , UE_MAX_FLT ) UE_MAX_FLT
79 #define INV_PI UE_PRIVATE_MATH_DEPRECATION(INV_PI , UE_INV_PI ) UE_INV_PI
80 #define HALF_PI UE_PRIVATE_MATH_DEPRECATION(HALF_PI , UE_HALF_PI ) UE_HALF_PI
81 #define TWO_PI UE_PRIVATE_MATH_DEPRECATION(TWO_PI , UE_TWO_PI ) UE_TWO_PI
82 #define PI_SQUARED UE_PRIVATE_MATH_DEPRECATION(PI_SQUARED , UE_PI_SQUARED ) UE_PI_SQUARED
83 #define DOUBLE_INV_PI UE_PRIVATE_MATH_DEPRECATION(DOUBLE_INV_PI , UE_DOUBLE_INV_PI ) UE_DOUBLE_INV_PI
84 #define DOUBLE_HALF_PI UE_PRIVATE_MATH_DEPRECATION(DOUBLE_HALF_PI , UE_DOUBLE_HALF_PI ) UE_DOUBLE_HALF_PI
85 #define DOUBLE_TWO_PI UE_PRIVATE_MATH_DEPRECATION(DOUBLE_TWO_PI , UE_DOUBLE_TWO_PI ) UE_DOUBLE_TWO_PI
86 #define DOUBLE_PI_SQUARED UE_PRIVATE_MATH_DEPRECATION(DOUBLE_PI_SQUARED , UE_DOUBLE_PI_SQUARED ) UE_DOUBLE_PI_SQUARED
87 #define DOUBLE_UE_SQRT_2 UE_PRIVATE_MATH_DEPRECATION(DOUBLE_UE_SQRT_2 , UE_DOUBLE_SQRT_2 ) UE_DOUBLE_SQRT_2
88 #define DOUBLE_UE_SQRT_3 UE_PRIVATE_MATH_DEPRECATION(DOUBLE_UE_SQRT_3 , UE_DOUBLE_SQRT_3 ) UE_DOUBLE_SQRT_3
89 #define DOUBLE_UE_INV_SQRT_2 UE_PRIVATE_MATH_DEPRECATION(DOUBLE_UE_INV_SQRT_2 , UE_DOUBLE_INV_SQRT_2 ) UE_DOUBLE_INV_SQRT_2
90 #define DOUBLE_UE_INV_SQRT_3 UE_PRIVATE_MATH_DEPRECATION(DOUBLE_UE_INV_SQRT_3 , UE_DOUBLE_INV_SQRT_3 ) UE_DOUBLE_INV_SQRT_3
91 #define DOUBLE_UE_HALF_SQRT_2 UE_PRIVATE_MATH_DEPRECATION(DOUBLE_UE_HALF_SQRT_2 , UE_DOUBLE_HALF_SQRT_2 ) UE_DOUBLE_HALF_SQRT_2
92 #define DOUBLE_UE_HALF_SQRT_3 UE_PRIVATE_MATH_DEPRECATION(DOUBLE_UE_HALF_SQRT_3 , UE_DOUBLE_HALF_SQRT_3 ) UE_DOUBLE_HALF_SQRT_3
93 #define DELTA UE_PRIVATE_MATH_DEPRECATION(DELTA , UE_DELTA ) UE_DELTA
94 #define DOUBLE_DELTA UE_PRIVATE_MATH_DEPRECATION(DOUBLE_DELTA , UE_DOUBLE_DELTA ) UE_DOUBLE_DELTA
95 #define FLOAT_NORMAL_THRESH UE_PRIVATE_MATH_DEPRECATION(FLOAT_NORMAL_THRESH , UE_FLOAT_NORMAL_THRESH ) UE_FLOAT_NORMAL_THRESH
96 #define DOUBLE_NORMAL_THRESH UE_PRIVATE_MATH_DEPRECATION(DOUBLE_NORMAL_THRESH , UE_DOUBLE_NORMAL_THRESH ) UE_DOUBLE_NORMAL_THRESH
97 #define THRESH_POINT_ON_PLANE UE_PRIVATE_MATH_DEPRECATION(THRESH_POINT_ON_PLANE , UE_THRESH_POINT_ON_PLANE ) UE_THRESH_POINT_ON_PLANE
98 #define THRESH_POINT_ON_SIDE UE_PRIVATE_MATH_DEPRECATION(THRESH_POINT_ON_SIDE , UE_THRESH_POINT_ON_SIDE ) UE_THRESH_POINT_ON_SIDE
99 #define THRESH_POINTS_ARE_SAME UE_PRIVATE_MATH_DEPRECATION(THRESH_POINTS_ARE_SAME , UE_THRESH_POINTS_ARE_SAME ) UE_THRESH_POINTS_ARE_SAME
100 #define THRESH_POINTS_ARE_NEAR UE_PRIVATE_MATH_DEPRECATION(THRESH_POINTS_ARE_NEAR , UE_THRESH_POINTS_ARE_NEAR ) UE_THRESH_POINTS_ARE_NEAR
101 #define THRESH_NORMALS_ARE_SAME UE_PRIVATE_MATH_DEPRECATION(THRESH_NORMALS_ARE_SAME , UE_THRESH_NORMALS_ARE_SAME ) UE_THRESH_NORMALS_ARE_SAME
102 #define THRESH_UVS_ARE_SAME UE_PRIVATE_MATH_DEPRECATION(THRESH_UVS_ARE_SAME , UE_THRESH_UVS_ARE_SAME ) UE_THRESH_UVS_ARE_SAME
103 #define THRESH_VECTORS_ARE_NEAR UE_PRIVATE_MATH_DEPRECATION(THRESH_VECTORS_ARE_NEAR , UE_THRESH_VECTORS_ARE_NEAR ) UE_THRESH_VECTORS_ARE_NEAR
104 #define THRESH_SPLIT_POLY_WITH_PLANE UE_PRIVATE_MATH_DEPRECATION(THRESH_SPLIT_POLY_WITH_PLANE , UE_THRESH_SPLIT_POLY_WITH_PLANE ) UE_THRESH_SPLIT_POLY_WITH_PLANE
105 #define THRESH_SPLIT_POLY_PRECISELY UE_PRIVATE_MATH_DEPRECATION(THRESH_SPLIT_POLY_PRECISELY , UE_THRESH_SPLIT_POLY_PRECISELY ) UE_THRESH_SPLIT_POLY_PRECISELY
106 #define THRESH_ZERO_NORM_SQUARED UE_PRIVATE_MATH_DEPRECATION(THRESH_ZERO_NORM_SQUARED , UE_THRESH_ZERO_NORM_SQUARED ) UE_THRESH_ZERO_NORM_SQUARED
107 #define THRESH_NORMALS_ARE_PARALLEL UE_PRIVATE_MATH_DEPRECATION(THRESH_NORMALS_ARE_PARALLEL , UE_THRESH_NORMALS_ARE_PARALLEL ) UE_THRESH_NORMALS_ARE_PARALLEL
108 #define THRESH_NORMALS_ARE_ORTHOGONAL UE_PRIVATE_MATH_DEPRECATION(THRESH_NORMALS_ARE_ORTHOGONAL , UE_THRESH_NORMALS_ARE_ORTHOGONAL ) UE_THRESH_NORMALS_ARE_ORTHOGONAL
109 #define THRESH_VECTOR_NORMALIZED UE_PRIVATE_MATH_DEPRECATION(THRESH_VECTOR_NORMALIZED , UE_THRESH_VECTOR_NORMALIZED ) UE_THRESH_VECTOR_NORMALIZED
110 #define THRESH_QUAT_NORMALIZED UE_PRIVATE_MATH_DEPRECATION(THRESH_QUAT_NORMALIZED , UE_THRESH_QUAT_NORMALIZED ) UE_THRESH_QUAT_NORMALIZED
111 #define DOUBLE_THRESH_POINT_ON_PLANE UE_PRIVATE_MATH_DEPRECATION(DOUBLE_THRESH_POINT_ON_PLANE , UE_DOUBLE_THRESH_POINT_ON_PLANE ) UE_DOUBLE_THRESH_POINT_ON_PLANE
112 #define DOUBLE_THRESH_POINT_ON_SIDE UE_PRIVATE_MATH_DEPRECATION(DOUBLE_THRESH_POINT_ON_SIDE , UE_DOUBLE_THRESH_POINT_ON_SIDE ) UE_DOUBLE_THRESH_POINT_ON_SIDE
113 #define DOUBLE_THRESH_POINTS_ARE_SAME UE_PRIVATE_MATH_DEPRECATION(DOUBLE_THRESH_POINTS_ARE_SAME , UE_DOUBLE_THRESH_POINTS_ARE_SAME ) UE_DOUBLE_THRESH_POINTS_ARE_SAME
114 #define DOUBLE_THRESH_POINTS_ARE_NEAR UE_PRIVATE_MATH_DEPRECATION(DOUBLE_THRESH_POINTS_ARE_NEAR , UE_DOUBLE_THRESH_POINTS_ARE_NEAR ) UE_DOUBLE_THRESH_POINTS_ARE_NEAR
115 #define DOUBLE_THRESH_NORMALS_ARE_SAME UE_PRIVATE_MATH_DEPRECATION(DOUBLE_THRESH_NORMALS_ARE_SAME , UE_DOUBLE_THRESH_NORMALS_ARE_SAME ) UE_DOUBLE_THRESH_NORMALS_ARE_SAME
116 #define DOUBLE_THRESH_UVS_ARE_SAME UE_PRIVATE_MATH_DEPRECATION(DOUBLE_THRESH_UVS_ARE_SAME , UE_DOUBLE_THRESH_UVS_ARE_SAME ) UE_DOUBLE_THRESH_UVS_ARE_SAME
117 #define DOUBLE_THRESH_VECTORS_ARE_NEAR UE_PRIVATE_MATH_DEPRECATION(DOUBLE_THRESH_VECTORS_ARE_NEAR , UE_DOUBLE_THRESH_VECTORS_ARE_NEAR ) UE_DOUBLE_THRESH_VECTORS_ARE_NEAR
118 #define DOUBLE_THRESH_SPLIT_POLY_WITH_PLANE UE_PRIVATE_MATH_DEPRECATION(DOUBLE_THRESH_SPLIT_POLY_WITH_PLANE , UE_DOUBLE_THRESH_SPLIT_POLY_WITH_PLANE ) UE_DOUBLE_THRESH_SPLIT_POLY_WITH_PLANE
119 #define DOUBLE_THRESH_SPLIT_POLY_PRECISELY UE_PRIVATE_MATH_DEPRECATION(DOUBLE_THRESH_SPLIT_POLY_PRECISELY , UE_DOUBLE_THRESH_SPLIT_POLY_PRECISELY ) UE_DOUBLE_THRESH_SPLIT_POLY_PRECISELY
120 #define DOUBLE_THRESH_ZERO_NORM_SQUARED UE_PRIVATE_MATH_DEPRECATION(DOUBLE_THRESH_ZERO_NORM_SQUARED , UE_DOUBLE_THRESH_ZERO_NORM_SQUARED ) UE_DOUBLE_THRESH_ZERO_NORM_SQUARED
121 #define DOUBLE_THRESH_NORMALS_ARE_PARALLEL UE_PRIVATE_MATH_DEPRECATION(DOUBLE_THRESH_NORMALS_ARE_PARALLEL , UE_DOUBLE_THRESH_NORMALS_ARE_PARALLEL ) UE_DOUBLE_THRESH_NORMALS_ARE_PARALLEL
122 #define DOUBLE_THRESH_NORMALS_ARE_ORTHOGONAL UE_PRIVATE_MATH_DEPRECATION(DOUBLE_THRESH_NORMALS_ARE_ORTHOGONAL , UE_DOUBLE_THRESH_NORMALS_ARE_ORTHOGONAL ) UE_DOUBLE_THRESH_NORMALS_ARE_ORTHOGONAL
123 #define DOUBLE_THRESH_VECTOR_NORMALIZED UE_PRIVATE_MATH_DEPRECATION(DOUBLE_THRESH_VECTOR_NORMALIZED , UE_DOUBLE_THRESH_VECTOR_NORMALIZED ) UE_DOUBLE_THRESH_VECTOR_NORMALIZED
124 #define DOUBLE_THRESH_QUAT_NORMALIZED UE_PRIVATE_MATH_DEPRECATION(DOUBLE_THRESH_QUAT_NORMALIZED , UE_DOUBLE_THRESH_QUAT_NORMALIZED ) UE_DOUBLE_THRESH_QUAT_NORMALIZED
127#undef UE_INCLUDETOOL_IGNORE_INCONSISTENT_STATE
129#define UE_PI (3.1415926535897932f)
130#define UE_SMALL_NUMBER (1.e-8f)
131#define UE_KINDA_SMALL_NUMBER (1.e-4f)
132#define UE_BIG_NUMBER (3.4e+38f)
133#define UE_EULERS_NUMBER (2.71828182845904523536f)
134#define UE_GOLDEN_RATIO (1.6180339887498948482045868343656381f)
135#define UE_FLOAT_NON_FRACTIONAL (8388608.f)
138#define UE_DOUBLE_PI (3.141592653589793238462643383279502884197169399)
139#define UE_DOUBLE_SMALL_NUMBER (1.e-8)
140#define UE_DOUBLE_KINDA_SMALL_NUMBER (1.e-4)
141#define UE_DOUBLE_BIG_NUMBER (3.4e+38)
142#define UE_DOUBLE_EULERS_NUMBER (2.7182818284590452353602874713526624977572)
143#define UE_DOUBLE_GOLDEN_RATIO (1.6180339887498948482045868343656381)
144#define UE_DOUBLE_NON_FRACTIONAL (4503599627370496.0)
147#define UE_MAX_FLT 3.402823466e+38F
150#define UE_INV_PI (0.31830988618f)
151#define UE_HALF_PI (1.57079632679f)
152#define UE_TWO_PI (6.28318530717f)
153#define UE_PI_SQUARED (9.86960440108f)
155#define UE_DOUBLE_INV_PI (0.31830988618379067154)
156#define UE_DOUBLE_HALF_PI (1.57079632679489661923)
157#define UE_DOUBLE_TWO_PI (6.28318530717958647692)
158#define UE_DOUBLE_PI_SQUARED (9.86960440108935861883)
160#define UE_LN2 (0.69314718056f)
163#define UE_SQRT_2 (1.4142135623730950488016887242097f)
164#define UE_SQRT_3 (1.7320508075688772935274463415059f)
165#define UE_INV_SQRT_2 (0.70710678118654752440084436210485f)
166#define UE_INV_SQRT_3 (0.57735026918962576450914878050196f)
167#define UE_HALF_SQRT_2 (0.70710678118654752440084436210485f)
168#define UE_HALF_SQRT_3 (0.86602540378443864676372317075294f)
170#define UE_DOUBLE_SQRT_2 (1.4142135623730950488016887242097)
171#define UE_DOUBLE_SQRT_3 (1.7320508075688772935274463415059)
172#define UE_DOUBLE_INV_SQRT_2 (0.70710678118654752440084436210485)
173#define UE_DOUBLE_INV_SQRT_3 (0.57735026918962576450914878050196)
174#define UE_DOUBLE_HALF_SQRT_2 (0.70710678118654752440084436210485)
175#define UE_DOUBLE_HALF_SQRT_3 (0.86602540378443864676372317075294)
178#define UE_KM_TO_M (1000.f)
179#define UE_M_TO_KM (0.001f)
180#define UE_CM_TO_M (0.01f)
181#define UE_M_TO_CM (100.f)
182#define UE_CM2_TO_M2 (0.0001f)
183#define UE_M2_TO_CM2 (10000.f)
186#define UE_DELTA (0.00001f)
187#define UE_DOUBLE_DELTA (0.00001 )
193#define UE_FLOAT_NORMAL_THRESH (0.0001f)
194#define UE_DOUBLE_NORMAL_THRESH (0.0001)
199#define UE_THRESH_POINT_ON_PLANE (0.10f)
200#define UE_THRESH_POINT_ON_SIDE (0.20f)
201#define UE_THRESH_POINTS_ARE_SAME (0.00002f)
202#define UE_THRESH_POINTS_ARE_NEAR (0.015f)
203#define UE_THRESH_NORMALS_ARE_SAME (0.00002f)
204#define UE_THRESH_UVS_ARE_SAME (0.0009765625f)
206#define UE_THRESH_VECTORS_ARE_NEAR (0.0004f)
208#define UE_THRESH_SPLIT_POLY_WITH_PLANE (0.25f)
209#define UE_THRESH_SPLIT_POLY_PRECISELY (0.01f)
210#define UE_THRESH_ZERO_NORM_SQUARED (0.0001f)
211#define UE_THRESH_NORMALS_ARE_PARALLEL (0.999845f)
212#define UE_THRESH_NORMALS_ARE_ORTHOGONAL (0.017455f)
214#define UE_THRESH_VECTOR_NORMALIZED (0.01f)
215#define UE_THRESH_QUAT_NORMALIZED (0.01f)
218#define UE_DOUBLE_THRESH_POINT_ON_PLANE (0.10)
219#define UE_DOUBLE_THRESH_POINT_ON_SIDE (0.20)
220#define UE_DOUBLE_THRESH_POINTS_ARE_SAME (0.00002)
221#define UE_DOUBLE_THRESH_POINTS_ARE_NEAR (0.015)
222#define UE_DOUBLE_THRESH_NORMALS_ARE_SAME (0.00002)
223#define UE_DOUBLE_THRESH_UVS_ARE_SAME (0.0009765625)
225#define UE_DOUBLE_THRESH_VECTORS_ARE_NEAR (0.0004)
227#define UE_DOUBLE_THRESH_SPLIT_POLY_WITH_PLANE (0.25)
228#define UE_DOUBLE_THRESH_SPLIT_POLY_PRECISELY (0.01)
229#define UE_DOUBLE_THRESH_ZERO_NORM_SQUARED (0.0001)
230#define UE_DOUBLE_THRESH_NORMALS_ARE_PARALLEL (0.999845)
231#define UE_DOUBLE_THRESH_NORMALS_ARE_ORTHOGONAL (0.017455)
233#define UE_DOUBLE_THRESH_VECTOR_NORMALIZED (0.01)
234#define UE_DOUBLE_THRESH_QUAT_NORMALIZED (0.01)
262 constexpr static bool Value =
false;
278 return A > 0 ?
Min(TruncToInt(FRand() * (
float)
A),
A - 1) : 0;
285 return A > 0 ?
Min<int64>(TruncToInt(FRand() * (
float)
A),
A - 1) : 0;
367 template<
class T,
class U>
375 template<
class T,
class U>
426 template<
typename FloatType,
typename IntegralType, IntegralType SignedBit>
427 static inline bool TIsNearlyEqualByULP(FloatType
A, FloatType
B,
int32 MaxUlps)
430 if (FMath::IsNaN(
A) || FMath::IsNaN(
B))
439 if (!FMath::IsFinite(
A) || !FMath::IsFinite(
B))
518 template <
typename T>
527 return FloorToFloat(
F);
540 template <UE::CIntegral IntegralType>
566 return (
A >
B ) ? ( (
A >
C ) ? 0 : 2 ) : ( (
B >
C ) ? 1 : 2 );
573 return (
A <
B ) ? ( (
A <
C ) ? 0 : 2 ) : ( (
B <
C ) ? 1 : 2 );
594 return Max(
Min(
X, MaxValue), MinValue);
609 template <UE::CFloatingPo
int T>
637 template <UE::CIntegral T>
641 using SizeType = std::make_unsigned_t<T>;
646 SizeType
Size = (SizeType)((SizeType)
Max - (SizeType)
Min);
670 template <
typename ValueType,
typename BaseType>
673 if constexpr (std::is_floating_point_v<ValueType>)
696 return (
Dividend + Divisor - 1) / Divisor;
711 ? (
Dividend + Divisor / 2) / Divisor
712 : (
Dividend - Divisor / 2 + 1) / Divisor;
740 constexpr double LogToLog2 = 1.4426950408889634;
752 template <UE::CFloatingPo
int T>
787 *
ScalarSin = ( ( ( ( (-2.3889859e-08f *
y2 + 2.7525562e-06f) *
y2 - 0.00019840874f ) *
y2 + 0.0083333310f ) *
y2 - 0.16666667f ) *
y2 + 1.0f ) * y;
790 T p = ( ( ( ( -2.6051615e-07f *
y2 + 2.4760495e-05f ) *
y2 - 0.0013888378f ) *
y2 + 0.041666638f ) *
y2 - 0.5f ) *
y2 + 1.0f;
817#define FASTASIN_HALF_PI (1.5707963050f)
828 const float x = FMath::Abs(
Value);
829 float omx = 1.0f - x;
834 const float root = FMath::Sqrt(
omx);
836 float result = ((((((-0.0012624911f * x + 0.0066700901f) * x - 0.0170881256f) * x + 0.0308918810f) * x - 0.0501743046f) * x + 0.0889789874f) * x - 0.2145988016f) * x +
FASTASIN_HALF_PI;
841#undef FASTASIN_HALF_PI
846 return FMath::Asin(
Value);
895 UE_REQUIRES(std::is_floating_point_v<T> || std::is_floating_point_v<T2>)
900 auto Delta = A2 - A1;
912 UE_REQUIRES(std::is_floating_point_v<T> || std::is_floating_point_v<T2>)
917 auto Delta = A2 - A1;
926 template <UE::CFloatingPo
int T>
943 template <UE::CFloatingPo
int T>
1000 template<
typename T>
1046 template <UE::CFloatingPo
int T,
typename T2>
1051 const T Divisor = MaxValue - MinValue;
1054 using RetType =
decltype(T() /
T2());
1055 return (
Value >= MaxValue) ? (RetType)1 : (RetType)0;
1058 return (
Value - MinValue) / Divisor;
1062 template <UE::CFloatingPo
int T,
typename T2>
1069 template <UE::CFloatingPo
int T,
typename T2>
1072 return Lerp(Range.X, Range.Y,
Pct);
1076 template<
typename T,
typename T2>
1085 template<
typename T,
typename T2>
1094 return GetRangePct(Range.GetLowerBoundValue(), Range.GetUpperBoundValue(),
Value);
1100 return FMath::Lerp<T>(Range.GetLowerBoundValue(), Range.GetUpperBoundValue(),
Pct);
1215 const U A3 = A2 *
A;
1217 return T((((2*A3)-(3*A2)+1) * P0) + ((A3-(2*A2)+
A) * T0) + ((A3-A2) * T1) + (((-2*A3)+(3*A2)) * P1));
1240 template <
typename T, UE::CFloatingPo
int U>
1243 T a = 6.f*P0 + 3.f*T0 + 3.f*T1 - 6.f*P1;
1244 T b = -6.f*P0 - 4.f*T0 - 2.f*T1 + 6.f*P1;
1249 return T((a * A2) + (b *
A) + c);
1261 template <
typename T, UE::CFloatingPo
int U>
1264 T a = 12.f*P0 + 6.f*T0 + 6.f*T1 - 12.f*P1;
1265 T b = -6.f*P0 - 4.f*T0 - 2.f*T1 + 6.f*P1;
1299 if (Steps <= 1 ||
Alpha <= 0)
1303 else if (
Alpha >= 1)
1392 template<
typename T,
typename U >
1407 [[
nodiscard]]
static constexpr inline U
CubicCRSplineInterp(
const U& P0,
const U& P1,
const U& P2,
const U& P3,
const float T0,
const float T1,
const float T2,
const float T3,
const float T)
1472 template <
typename T>
1482 template<
typename T1,
typename T2 = T1,
typename T3 = T2,
typename T4 = T3>
1485 static_assert(!std::is_same_v<T1, bool> && !std::is_same_v<T2, bool>,
"Boolean types may not be interpolated");
1486 using RetType =
decltype(T1() *
T2() *
T3() *
T4());
1488 const RetType Dist = Target -
Current;
1493 return static_cast<RetType
>(Target);
1496 const RetType
Step = InterpSpeed * DeltaTime;
1501 template<
typename T1,
typename T2 = T1,
typename T3 = T2,
typename T4 = T3>
1504 static_assert(!std::is_same_v<T1, bool> && !std::is_same_v<T2, bool>,
"Boolean types may not be interpolated");
1505 using RetType =
decltype(T1() *
T2() *
T3() *
T4());
1508 if( InterpSpeed <= 0.f )
1510 return static_cast<RetType
>(Target);
1514 const RetType Dist = Target -
Current;
1519 return static_cast<RetType
>(Target);
1523 const RetType DeltaMove = Dist * FMath::Clamp<RetType>(DeltaTime * InterpSpeed, 0.f, 1.f);
1548 constexpr T
A(1.00746054f);
1549 constexpr T
B(0.45053901f);
1550 constexpr T
C(0.25724632f);
1551 return 1 / (1 +
A *
X +
B *
X *
X +
C *
X *
X *
X);
1707 const T C1 = Err - C2;
1815 template<
typename FReal>
1828 template<
typename FReal>
1843 template<
typename FReal>
1857 template<
typename FReal>
1871 template<
typename FReal>
1904 template<
typename FReal>
1910 template<
typename FReal>
1914 template<
typename FReal>
1918 template<
typename FReal>
1922 template<
typename FReal>
1926 template<
typename FReal>
1933 template<
typename FReal>
1943 template<
typename T>
1950 template<
typename FReal>
1957 template<
typename FReal>
1985 template <
typename T>
2000 template <
typename T>
2048 template<
typename T>
2196 return (
F < 0.0f) ? FloorToFloat(
F) : CeilToFloat(
F);
2211 return (
F < 0.0f) ? CeilToFloat(
F) : FloorToFloat(
F);
2226 return FloorToFloat(
F);
2241 return CeilToFloat(
F);
2246 return CeilToDouble(
F);
2356 template<
typename T>
2426 float y = x * 0.5f + 0.5f;
2488 template<
typename T>
2509 template<
typename T>
2546 template<
typename TDest,
typename TSrc,
typename InAllocatorType>
2550 if constexpr (std::is_same_v<TDest, TSrc>)
2558 for (
const TSrc& Item : From)
2567 template<
typename TDest,
typename TSrc,
typename InAllocatorType>
2571 if constexpr (std::is_same_v<TDest, TSrc>)
2579 for (
const TSrc& Item : From)
2592 template <UE::CIntegral OutIntType, UE::CFloatingPo
int InFloatType>
2604 return FMath::TruncToInt32(FloatValue);
2613 return FMath::TruncToInt64(FloatValue);
2621 return FMath::TruncToInt32(FloatValue);
2630 return FMath::TruncToInt64(FloatValue);
2636#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_7
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
return true
Definition ExternalRpcRegistry.cpp:601
FVector FloorToDouble(const FVector Vec)
Definition HeterogeneousVolumesLiveShadingPipeline.cpp:2340
#define Square(a, x, y)
Definition Predicates.inl:251
#define UE_REQUIRES(...)
Definition Requires.h:86
#define UE_DOUBLE_PI
Definition UnrealMathUtility.h:138
#define UE_DOUBLE_SMALL_NUMBER
Definition UnrealMathUtility.h:139
#define UE_INV_PI
Definition UnrealMathUtility.h:150
#define UE_PI
Definition UnrealMathUtility.h:129
#define UE_SMALL_NUMBER
Definition UnrealMathUtility.h:130
#define UE_HALF_PI
Definition UnrealMathUtility.h:151
#define UE_TWO_PI
Definition UnrealMathUtility.h:152
#define FASTASIN_HALF_PI
Definition UnrealMathUtility.h:817
#define UE_KINDA_SMALL_NUMBER
Definition UnrealMathUtility.h:131
float Val(const FString &Value)
Definition UnrealMath.cpp:3163
uint32 Size
Definition VulkanMemory.cpp:4034
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
TArray< TDest, InAllocatorType > ConvertArrayTypeClampMax(const TArray< TSrc, InAllocatorType > &From)
Definition UnrealMathUtility.h:2568
OutIntType FloatToIntCastChecked(InFloatType FloatValue)
Definition UnrealMathUtility.h:2593
TArray< TDest, InAllocatorType > ConvertArrayType(const TArray< TSrc, InAllocatorType > &From)
Definition UnrealMathUtility.h:2547
Definition AdvancedWidgetsModule.cpp:13
U16 Index
Definition radfft.cpp:71
Definition UnrealMathUtility.h:270
RESOLVE_FLOAT_AMBIGUITY_3_ARGS(ClampAngle)
static UE::Math::TRotator< T > LerpRange(const UE::Math::TRotator< T > &A, const UE::Math::TRotator< T > &B, U Alpha)
static auto GetRangeValue(UE::Math::TVector2< T > const &Range, T2 Pct)
Definition UnrealMathUtility.h:1070
static constexpr void CriticallyDampedSmoothing(T &InOutValue, T &InOutValueRate, const T &InTargetValue, const T &InTargetValueRate, const float InDeltaTime, const float InSmoothingTime)
Definition UnrealMathUtility.h:1601
static CORE_API int32 PlaneAABBRelativePosition(const FPlane &P, const FBox &AABB)
Definition UnrealMath.cpp:2104
static CORE_API bool GetDistanceWithinConeSegment(FVector Point, FVector ConeStartPoint, FVector ConeLine, float RadiusAtStart, float RadiusAtEnd, float &PercentageOut)
Definition UnrealMath.cpp:2434
RESOLVE_FLOAT_AMBIGUITY_2_ARGS(FRandRange)
static constexpr UE_FORCEINLINE_HINT auto DegreesToRadians(T const &DegVal) -> decltype(DegVal *(UE_PI/180.f))
Definition UnrealMathUtility.h:871
static UE_FORCEINLINE_HINT auto GetMappedRangeValueUnclamped(const UE::Math::TVector2< T > &InputRange, const UE::Math::TVector2< T > &OutputRange, const T2 Value)
Definition UnrealMathUtility.h:1086
static constexpr UE_FORCEINLINE_HINT int64 Clamp(const int64 X, const int32 Min, const int32 Max)
Definition UnrealMathUtility.h:604
static CORE_API FVector ClosestPointOnTetrahedronToPoint(const FVector &Point, const FVector &A, const FVector &B, const FVector &C, const FVector &D)
Definition UnrealMath.cpp:2320
static CORE_API bool SegmentIntersection2D(const FVector &SegmentStartA, const FVector &SegmentEndA, const FVector &SegmentStartB, const FVector &SegmentEndB, FVector &out_IntersectionPoint)
Definition UnrealMath.cpp:1972
static CORE_API UE::Math::TVector2< T > ClosestPointOnSegment2D(const UE::Math::TVector2< T > &Point, const UE::Math::TVector2< T > &StartPoint, const UE::Math::TVector2< T > &EndPoint)
static bool PointBoxIntersection(const UE::Math::TVector< FReal > &Point, const UE::Math::TBox< FReal > &Box)
Definition Box.h:1030
static T InterpCircularOut(const T &A, const T &B, float Alpha)
Definition UnrealMathUtility.h:1374
static UE::Math::TVector< FReal > LinePlaneIntersection(const UE::Math::TVector< FReal > &Point1, const UE::Math::TVector< FReal > &Point2, const UE::Math::TVector< FReal > &PlaneOrigin, const UE::Math::TVector< FReal > &PlaneNormal)
static T InterpEaseInOut(const T &A, const T &B, float Alpha, float Exp)
Definition UnrealMathUtility.h:1288
static T InterpExpoInOut(const T &A, const T &B, float Alpha)
Definition UnrealMathUtility.h:1357
static T DynamicWeightedMovingAverage(T CurrentSample, T PreviousSample, T MaxDistance, T MinWeight, T MaxWeight)
Definition UnrealMathUtility.h:2510
static CORE_API float PerlinNoise1D(float Value)
Definition UnrealMath.cpp:3611
static auto GetRangePct(UE::Math::TVector2< T > const &Range, T2 Value)
Definition UnrealMathUtility.h:1063
static constexpr UE_FORCEINLINE_HINT T LerpStable(const T &A, const T &B, float Alpha)
Definition UnrealMathUtility.h:1154
static auto LerpStable(const T1 &A, const T2 &B, const T3 &Alpha) -> decltype(A *B)
Definition UnrealMathUtility.h:1166
static UE_FORCEINLINE_HINT double RandRange(double InMin, double InMax)
Definition UnrealMathUtility.h:307
static constexpr void SinCos(std::decay_t< T > *ScalarSin, std::decay_t< T > *ScalarCos, T Value)
Definition UnrealMathUtility.h:753
static UE_FORCEINLINE_HINT void CartesianToPolar(const UE::Math::TVector2< T > InCart, UE::Math::TVector2< T > &OutPolar)
Definition UnrealMathUtility.h:987
static constexpr UE_FORCEINLINE_HINT auto RadiansToDegrees(T const &RadVal) -> decltype(RadVal *(180.f/UE_PI))
Definition UnrealMathUtility.h:857
static constexpr int32 GreatestCommonDivisor(int32 a, int32 b)
Definition UnrealMathUtility.h:2432
static CORE_API float TruncateToHalfIfClose(float F, float Tolerance=UE_SMALL_NUMBER)
Definition UnrealMath.cpp:2969
static CORE_API UE::Math::TQuat< T > QInterpConstantTo(const UE::Math::TQuat< T > &Current, const UE::Math::TQuat< T > &Target, float DeltaTime, float InterpSpeed)
Definition UnrealMath.cpp:2725
static UE_FORCEINLINE_HINT float RandRange(float InMin, float InMax)
Definition UnrealMathUtility.h:302
static CORE_API FVector GetReflectionVector(const FVector &Direction, const FVector &SurfaceNormal)
Definition UnrealMath.cpp:2962
static UE_FORCEINLINE_HINT bool IsNearlyEqualByULP(float A, float B, int32 MaxUlps=4)
Definition UnrealMathUtility.h:486
static bool SphereAABBIntersection(const UE::Math::TVector< FReal > &SphereCenter, const FReal RadiusSquared, const UE::Math::TBox< FReal > &AABB)
Definition Box.h:1190
static CORE_API UE::Math::TVector2< T > Vector2DInterpTo(const UE::Math::TVector2< T > &Current, const UE::Math::TVector2< T > &Target, float DeltaTime, float InterpSpeed)
Definition UnrealMath.cpp:2630
static constexpr T CubicInterpDerivative(const T &P0, const T &T0, const T &P1, const T &T1, const U &A)
Definition UnrealMathUtility.h:1241
static constexpr T UnwindRadians(T A)
Definition UnrealMathUtility.h:927
static constexpr UE_FORCEINLINE_HINT T DivideAndRoundUp(T Dividend, T Divisor)
Definition UnrealMathUtility.h:694
static CORE_API float RoundHalfToZero(float F)
Definition UnrealMath.cpp:3063
static constexpr UE_FORCEINLINE_HINT IntegralType Floor(IntegralType I)
Definition UnrealMathUtility.h:541
static UE_FORCEINLINE_HINT bool IsNearlyEqual(float A, float B, float ErrorTolerance=UE_SMALL_NUMBER)
Definition UnrealMathUtility.h:388
RESOLVE_FLOAT_PREDICATE_AMBIGUITY_2_ARGS(IsNearlyEqual)
static void PolarToCartesian(const T Rad, const T Ang, T &OutX, T &OutY)
Definition UnrealMathUtility.h:994
static CORE_API float PointDistToSegment(const FVector &Point, const FVector &StartPoint, const FVector &EndPoint)
Definition UnrealMath.cpp:1745
static CORE_API FLinearColor CInterpTo(const FLinearColor &Current, const FLinearColor &Target, float DeltaTime, float InterpSpeed)
Definition UnrealMath.cpp:2701
static FReal RayPlaneIntersectionParam(const UE::Math::TVector< FReal > &RayOrigin, const UE::Math::TVector< FReal > &RayDirection, const UE::Math::TPlane< FReal > &Plane)
static auto GetMappedRangeValueClamped(const UE::Math::TVector2< T > &InputRange, const UE::Math::TVector2< T > &OutputRange, const T2 Value)
Definition UnrealMathUtility.h:1077
static T InterpCircularInOut(const T &A, const T &B, float Alpha)
Definition UnrealMathUtility.h:1383
static constexpr UE_FORCEINLINE_HINT bool IsPowerOfTwo(T Value)
Definition UnrealMathUtility.h:519
static UE_FORCEINLINE_HINT T BiLerp(const T &P00, const T &P10, const T &P01, const T &P11, const U &FracX, const U &FracY)
Definition UnrealMathUtility.h:1193
static UE_FORCEINLINE_HINT T GetRangeValue(TRange< T > const &Range, T Pct)
Definition UnrealMathUtility.h:1098
static CORE_API FVector VInterpNormalRotationTo(const FVector &Current, const FVector &Target, float DeltaTime, float RotationSpeedDegrees)
Definition UnrealMath.cpp:2540
static CORE_API bool MemoryTest(void *BaseAddress, uint32 NumBytes)
Definition UnrealMath.cpp:3109
static constexpr UE_FORCEINLINE_HINT T Lerp(const T &A, const T &B, const U &Alpha)
Definition UnrealMathUtility.h:1116
static CORE_API bool SegmentTriangleIntersection(const FVector &StartPoint, const FVector &EndPoint, const FVector &A, const FVector &B, const FVector &C, FVector &OutIntersectPoint, FVector &OutTriangleNormal)
Definition UnrealMath.cpp:1939
static CORE_API bool SegmentPlaneIntersection(const FVector &StartPoint, const FVector &EndPoint, const FPlane &Plane, FVector &out_IntersectionPoint)
Definition UnrealMath.cpp:1927
static UE_FORCEINLINE_HINT double RoundToZero(double F)
Definition UnrealMathUtility.h:2214
static CORE_API bool GetDotDistance(FVector2D &OutDotDist, const FVector &Direction, const FVector &AxisX, const FVector &AxisY, const FVector &AxisZ)
Definition UnrealMath.cpp:2495
static UE::Math::TSphere< FReal > ComputeBoundingSphereForCone(UE::Math::TVector< FReal > const &ConeOrigin, UE::Math::TVector< FReal > const &ConeDirection, FReal ConeRadius, FReal CosConeAngle, FReal SinConeAngle)
Definition Sphere.h:394
static constexpr UE_FORCEINLINE_HINT double RadiansToDegrees(double const &RadVal)
Definition UnrealMathUtility.h:863
static CORE_API FString FormatIntToHumanReadable(int32 Val)
Definition UnrealMath.cpp:3093
static CORE_API UE::Math::TQuat< T > QInterpTo(const UE::Math::TQuat< T > &Current, const UE::Math::TQuat< T > &Target, float DeltaTime, float InterpSpeed)
Definition UnrealMath.cpp:2752
static CORE_API bool MatrixInverse(FMatrix44f *DstMatrix, const FMatrix44f *SrcMatrix)
Definition UnrealMath.cpp:928
static CORE_API float RoundHalfToEven(float F)
Definition UnrealMath.cpp:2997
static void SinCos(double *ScalarSin, double *ScalarCos, double Value)
Definition UnrealMathUtility.h:794
static CORE_API float PerlinNoise3D(const FVector &Location)
Definition UnrealMath.cpp:3658
static constexpr T CubicInterp(const T &P0, const T &T0, const T &P1, const T &T1, const U &A)
Definition UnrealMathUtility.h:1212
static CORE_API const uint32 BitFlag[32]
Definition UnrealMathUtility.h:63
static constexpr int32 LeastCommonMultiplier(int32 a, int32 b)
Definition UnrealMathUtility.h:2445
static CORE_API FRotator RInterpConstantTo(const FRotator &Current, const FRotator &Target, float DeltaTime, float InterpSpeed)
Definition UnrealMath.cpp:2647
static T InterpEaseOut(const T &A, const T &B, float Alpha, float Exp)
Definition UnrealMathUtility.h:1280
static CORE_API FRotator RInterpTo(const FRotator &Current, const FRotator &Target, float DeltaTime, float InterpSpeed)
Definition UnrealMath.cpp:2671
static CORE_API bool LineExtentBoxIntersection(const FBox &inBox, const FVector &Start, const FVector &End, const FVector &Extent, FVector &HitLocation, FVector &HitNormal, float &HitTime)
Definition UnrealMath.cpp:1028
static CORE_API float FixedTurn(float InCurrent, float InDesired, float InDeltaRate)
Definition UnrealMath.cpp:3488
static UE_FORCEINLINE_HINT double RoundFromZero(double F)
Definition UnrealMathUtility.h:2199
static UE_FORCEINLINE_HINT double Floor(double F)
Definition UnrealMathUtility.h:531
static CORE_API FVector2D Vector2DInterpConstantTo(const FVector2D &Current, const FVector2D &Target, float DeltaTime, float InterpSpeed)
Definition UnrealMath.cpp:2607
static constexpr void ExponentialSmoothingApprox(T &InOutValue, const T &InTargetValue, const float InDeltaTime, const float InSmoothingTime)
Definition UnrealMathUtility.h:1565
static T InterpSinOut(const T &A, const T &B, float Alpha)
Definition UnrealMathUtility.h:1324
static constexpr UE_FORCEINLINE_HINT T Square(const T A)
Definition UnrealMathUtility.h:578
static void CartesianToPolar(const T X, const T Y, T &OutRad, T &OutAng)
Definition UnrealMathUtility.h:980
static constexpr auto GetRangePct(T MinValue, T MaxValue, T2 Value)
Definition UnrealMathUtility.h:1047
static UE_FORCEINLINE_HINT bool IsNearlyZero(double Value, double ErrorTolerance=UE_DOUBLE_SMALL_NUMBER)
Definition UnrealMathUtility.h:418
static T InterpEaseIn(const T &A, const T &B, float Alpha, float Exp)
Definition UnrealMathUtility.h:1272
static UE_FORCEINLINE_HINT float Floor(float F)
Definition UnrealMathUtility.h:525
static constexpr UE_FORCEINLINE_HINT bool IsWithin(const T &TestValue, const U &MinValue, const U &MaxValue)
Definition UnrealMathUtility.h:368
static constexpr T SmoothStep(T A, T B, T X)
Definition UnrealMathUtility.h:2357
static constexpr UE_FORCEINLINE_HINT T DivideAndRoundDown(T Dividend, T Divisor)
Definition UnrealMathUtility.h:701
static CORE_API float PointDistToLine(const FVector &Point, const FVector &Direction, const FVector &Origin, FVector &OutClosestPoint)
Definition UnrealMath.cpp:1679
static bool LineBoxIntersection2D(const UE::Math::TBox2< FReal > &Box, const UE::Math::TVector2< FReal > &Start, const UE::Math::TVector2< FReal > &End)
Definition Box2D.h:638
static CORE_API bool PlaneAABBIntersection(const FPlane &P, const FBox &AABB)
Definition UnrealMath.cpp:2148
static UE_FORCEINLINE_HINT double GetRangePct(TRange< T > const &Range, T Value)
Definition UnrealMathUtility.h:1092
static constexpr UE_FORCEINLINE_HINT float Clamp(const float X, const float Min, const float Max)
Definition UnrealMathUtility.h:600
static CORE_API void ApplyScaleToFloat(float &Dst, const FVector &DeltaScale, float Magnitude=1.0f)
Definition UnrealMath.cpp:3521
static UE_FORCEINLINE_HINT float RoundToNegativeInfinity(float F)
Definition UnrealMathUtility.h:2224
static constexpr auto FindDeltaAngleRadians(T A1, T2 A2) -> decltype(A1 - A2)
Definition UnrealMathUtility.h:914
static CORE_API float PerlinNoise2D(const FVector2D &Location)
Definition UnrealMath.cpp:3629
static UE_FORCEINLINE_HINT T Lerp(const T &A, const T &B, const U &Alpha)
Definition UnrealMathUtility.h:1127
static constexpr UE_FORCEINLINE_HINT double DegreesToRadians(double const &DegVal)
Definition UnrealMathUtility.h:877
static CORE_API FVector2D GetAzimuthAndElevation(const FVector &Direction, const FVector &AxisX, const FVector &AxisY, const FVector &AxisZ)
Definition UnrealMath.cpp:2520
static auto FInterpTo(T1 Current, T2 Target, T3 DeltaTime, T4 InterpSpeed)
Definition UnrealMathUtility.h:1502
static constexpr void SetBoolInBitField(uint8 *Ptr, uint32 Index, bool bSet)
Definition UnrealMathUtility.h:2387
static CORE_API UE::Math::TVector< T > ClosestPointOnSegment(const UE::Math::TVector< T > &Point, const UE::Math::TVector< T > &StartPoint, const UE::Math::TVector< T > &EndPoint)
static constexpr T BiLerp(const T &P00, const T &P10, const T &P01, const T &P11, const U &FracX, const U &FracY)
Definition UnrealMathUtility.h:1178
static double Log2(double Value)
Definition UnrealMathUtility.h:737
RESOLVE_FLOAT_PREDICATE_AMBIGUITY_3_ARGS(IsNearlyEqual)
static bool LineBoxIntersection(const UE::Math::TBox< FReal > &Box, const UE::Math::TVector< FReal > &Start, const UE::Math::TVector< FReal > &End, const UE::Math::TVector< FReal > &Direction)
Definition Box.h:1042
static bool LineSphereIntersection(const UE::Math::TVector< FReal > &Start, const UE::Math::TVector< FReal > &Dir, FReal Length, const UE::Math::TVector< FReal > &Origin, FReal Radius)
static CORE_API FVector4 ComputeBaryCentric3D(const FVector &Point, const FVector &A, const FVector &B, const FVector &C, const FVector &D)
Definition UnrealMath.cpp:2293
static CORE_API bool Eval(FString Str, float &OutValue)
Definition UnrealMath.cpp:3432
static int64 RandRange(int64 Min, int64 Max)
Definition UnrealMathUtility.h:295
static bool IntersectPlanes2(UE::Math::TVector< FReal > &I, UE::Math::TVector< FReal > &D, const UE::Math::TPlane< FReal > &P1, const UE::Math::TPlane< FReal > &P2)
static T ClampAngle(T AngleDegrees, T MinAngleDegrees, T MaxAngleDegrees)
Definition Rotator.h:947
static T GetMappedRangeValueClamped(const TRange< T > &InputRange, const TRange< T > &OutputRange, const T Value)
Definition UnrealMathUtility.h:1104
static void SpringDamperSmoothing(T &InOutValue, T &InOutValueRate, const T &InTargetValue, const T &InTargetValueRate, const float InDeltaTime, const float InSmoothingTime, const float InDampingRatio)
Definition UnrealMathUtility.h:1764
static CORE_API FVector RandPointInBox(const FBox &Box)
Definition UnrealMath.cpp:2955
static UE_FORCEINLINE_HINT void SinCos(T *ScalarSin, T *ScalarCos, U Value)
Definition UnrealMathUtility.h:806
static constexpr T CubicInterpSecondDerivative(const T &P0, const T &T0, const T &P1, const T &T1, const U &A)
Definition UnrealMathUtility.h:1262
static CORE_API FVector ComputeBaryCentric2D(const FVector &Point, const FVector &A, const FVector &B, const FVector &C)
Definition UnrealMath.cpp:2283
static CORE_API FVector VRandCone(FVector const &Dir, float ConeHalfAngleRad)
Definition UnrealMath.cpp:2859
static T WeightedMovingAverage(T CurrentSample, T PreviousSample, T Weight)
Definition UnrealMathUtility.h:2489
static CORE_API FVector ClosestPointOnInfiniteLine(const FVector &LineStart, const FVector &LineEnd, const FVector &Point)
Definition UnrealMath.cpp:346
static UE::Math::TVector< FReal > LinePlaneIntersection(const UE::Math::TVector< FReal > &Point1, const UE::Math::TVector< FReal > &Point2, const UE::Math::TPlane< FReal > &Plane)
static float FastAsin(float Value)
Definition UnrealMathUtility.h:824
static FVector VRand()
Definition Vector.h:2706
static T InterpCircularIn(const T &A, const T &B, float Alpha)
Definition UnrealMathUtility.h:1366
static UE_FORCEINLINE_HINT int64 RandHelper64(int64 A)
Definition UnrealMathUtility.h:281
static int32 RandRange(int32 Min, int32 Max)
Definition UnrealMathUtility.h:289
static constexpr auto Modulo(ValueType Value, BaseType Base)
Definition UnrealMathUtility.h:671
static constexpr U CubicCRSplineInterp(const U &P0, const U &P1, const U &P2, const U &P3, const float T0, const float T1, const float T2, const float T3, const float T)
Definition UnrealMathUtility.h:1407
static constexpr UE_FORCEINLINE_HINT T Clamp(const T X, const T MinValue, const T MaxValue)
Definition UnrealMathUtility.h:592
static CORE_API float RoundHalfFromZero(float F)
Definition UnrealMath.cpp:3033
static CORE_API void SegmentDistToSegment(FVector A1, FVector B1, FVector A2, FVector B2, FVector &OutP1, FVector &OutP2)
Definition UnrealMath.cpp:1917
static T InterpExpoOut(const T &A, const T &B, float Alpha)
Definition UnrealMathUtility.h:1349
RESOLVE_FLOAT_PREDICATE_AMBIGUITY_2_ARGS(IsNearlyZero)
static bool IntersectPlanes3(UE::Math::TVector< FReal > &I, const UE::Math::TPlane< FReal > &P1, const UE::Math::TPlane< FReal > &P2, const UE::Math::TPlane< FReal > &P3)
static UE_FORCEINLINE_HINT bool IsNearlyEqualByULP(double A, double B, int32 MaxUlps=4)
Definition UnrealMathUtility.h:508
static CORE_API FVector ClosestPointOnTriangleToPoint(const FVector &Point, const FVector &A, const FVector &B, const FVector &C)
Definition UnrealMath.cpp:2183
static UE_FORCEINLINE_HINT double FastAsin(double Value)
Definition UnrealMathUtility.h:843
static CORE_API FVector VInterpTo(const FVector &Current, const FVector &Target, float DeltaTime, float InterpSpeed)
Definition UnrealMath.cpp:2584
static constexpr UE_FORCEINLINE_HINT float DegreesToRadians(float const &DegVal)
Definition UnrealMathUtility.h:876
static CORE_API bool ComputeBarycentricTri(const FVector &Point, const FVector &A, const FVector &B, const FVector &C, FVector &OutBarycentric, double Tolerance=UE_DOUBLE_SMALL_NUMBER)
Definition UnrealMath.cpp:2249
static constexpr T WrapExclusive(const T X, const T Min, const T Max)
Definition UnrealMathUtility.h:638
static CORE_API uint32 ComputeProjectedSphereScissorRect(FIntRect &InOutScissorRect, FVector SphereOrigin, float Radius, FVector ViewOrigin, const FMatrix &ViewMatrix, const FMatrix &ProjMatrix)
Definition UnrealMath.cpp:2063
static auto Lerp(const T1 &A, const T2 &B, const T3 &Alpha) -> decltype(A *B)
Definition UnrealMathUtility.h:1139
static UE_FORCEINLINE_HINT float RoundFromZero(float F)
Definition UnrealMathUtility.h:2194
static constexpr UE_FORCEINLINE_HINT T Min3(const T A, const T B, const T C)
Definition UnrealMathUtility.h:558
static CORE_API UE::Math::TVector< T > ClosestPointOnLine(const UE::Math::TVector< T > &LineStart, const UE::Math::TVector< T > &LineEnd, const UE::Math::TVector< T > &Point)
static constexpr T InterpStep(const T &A, const T &B, float Alpha, int32 Steps)
Definition UnrealMathUtility.h:1297
static uint8 Quantize8SignedByte(float x)
Definition UnrealMathUtility.h:2423
static CORE_API float GetTForSegmentPlaneIntersect(const FVector &StartPoint, const FVector &EndPoint, const FPlane &Plane)
Definition UnrealMath.cpp:1922
static CORE_API bool PointsAreCoplanar(const TArray< FVector > &Points, const float Tolerance=0.1f)
Definition UnrealMath.cpp:2470
static UE_FORCEINLINE_HINT double RoundToNegativeInfinity(double F)
Definition UnrealMathUtility.h:2229
static CORE_API float PointDistToSegmentSquared(const FVector &Point, const FVector &StartPoint, const FVector &EndPoint)
Definition UnrealMath.cpp:1751
static CORE_API void SegmentDistToSegmentSafe(UE::Math::TVector< T > A1, UE::Math::TVector< T > B1, UE::Math::TVector< T > A2, UE::Math::TVector< T > B2, UE::Math::TVector< T > &OutP1, UE::Math::TVector< T > &OutP2)
static UE_FORCEINLINE_HINT float RoundToPositiveInfinity(float F)
Definition UnrealMathUtility.h:2239
static UE_FORCEINLINE_HINT float RoundToZero(float F)
Definition UnrealMathUtility.h:2209
static CORE_API void WindRelativeAnglesDegrees(float InAngle0, float &InOutAngle1)
Definition UnrealMath.cpp:3468
static CORE_API FVector GetBaryCentric2D(const FVector &Point, const FVector &A, const FVector &B, const FVector &C)
Definition UnrealMath.cpp:2233
static constexpr UE_FORCEINLINE_HINT int32 Min3Index(const T A, const T B, const T C)
Definition UnrealMathUtility.h:571
static constexpr UE_FORCEINLINE_HINT T Wrap(const T X, const T Min, const T Max)
Definition UnrealMathUtility.h:610
static constexpr T InvExpApprox(T X)
Definition UnrealMathUtility.h:1546
static constexpr bool ExtractBoolFromBitfield(const uint8 *Ptr, uint32 Index)
Definition UnrealMathUtility.h:2375
static UE_FORCEINLINE_HINT bool IsNearlyZero(float Value, float ErrorTolerance=UE_SMALL_NUMBER)
Definition UnrealMathUtility.h:407
static constexpr UE_FORCEINLINE_HINT T Cube(const T A)
Definition UnrealMathUtility.h:585
static constexpr UE_FORCEINLINE_HINT double Clamp(const double X, const double Min, const double Max)
Definition UnrealMathUtility.h:601
static UE_FORCEINLINE_HINT T CubicInterp(const T &P0, const T &T0, const T &P1, const T &T1, const U &A)
Definition UnrealMathUtility.h:1226
static void SpringDamper(T &InOutValue, T &InOutValueRate, const T &InTargetValue, const T &InTargetValueRate, const float InDeltaTime, const float InUndampedFrequency, const float InDampingRatio)
Definition UnrealMathUtility.h:1665
static CORE_API void SphereDistToLine(FVector SphereOrigin, float SphereRadius, FVector LineOrigin, FVector LineDir, FVector &OutClosestPoint)
Definition UnrealMath.cpp:2407
static constexpr UE_FORCEINLINE_HINT T LerpStable(const T &A, const T &B, double Alpha)
Definition UnrealMathUtility.h:1147
static float MakePulsatingValue(const double InCurrentTime, const float InPulsesPerSecond, const float InPhase=0.0f)
Definition UnrealMathUtility.h:1798
MIX_FLOATS_2_ARGS(GridSnap)
static UE_FORCEINLINE_HINT double FRandRange(double InMin, double InMax)
Definition UnrealMathUtility.h:319
static UE_FORCEINLINE_HINT float FRandRange(float InMin, float InMax)
Definition UnrealMathUtility.h:313
static CORE_API FVector VInterpConstantTo(const FVector &Current, const FVector &Target, float DeltaTime, float InterpSpeed)
Definition UnrealMath.cpp:2562
static constexpr UE_FORCEINLINE_HINT T Max3(const T A, const T B, const T C)
Definition UnrealMathUtility.h:551
static UE_FORCEINLINE_HINT bool IsNearlyEqual(double A, double B, double ErrorTolerance=UE_DOUBLE_SMALL_NUMBER)
Definition UnrealMathUtility.h:393
static CORE_API FVector2D RandPointInCircle(float CircleRadius)
Definition UnrealMath.cpp:2938
static auto FInterpConstantTo(T1 Current, T2 Target, T3 DeltaTime, T4 InterpSpeed)
Definition UnrealMathUtility.h:1483
static float Log2(float Value)
Definition UnrealMathUtility.h:722
static UE_FORCEINLINE_HINT double RoundToPositiveInfinity(double F)
Definition UnrealMathUtility.h:2244
static UE::Math::TVector< FReal > RayPlaneIntersection(const UE::Math::TVector< FReal > &RayOrigin, const UE::Math::TVector< FReal > &RayDirection, const UE::Math::TPlane< FReal > &Plane)
static constexpr U CubicCRSplineInterpSafe(const U &P0, const U &P1, const U &P2, const U &P3, const float T0, const float T1, const float T2, const float T3, const float T)
Definition UnrealMathUtility.h:1427
static constexpr T UnwindDegrees(T A)
Definition UnrealMathUtility.h:944
static UE_FORCEINLINE_HINT void PolarToCartesian(const UE::Math::TVector2< T > InPolar, UE::Math::TVector2< T > &OutCart)
Definition UnrealMathUtility.h:1001
static CORE_API bool SphereConeIntersection(const FVector &SphereCenter, float SphereRadius, const FVector &ConeAxis, float ConeAngleSin, float ConeAngleCos)
Definition UnrealMath.cpp:2153
static constexpr UE_FORCEINLINE_HINT T GridSnap(T Location, T Grid)
Definition UnrealMathUtility.h:685
static constexpr auto FindDeltaAngleDegrees(T A1, T2 A2) -> decltype(A1 - A2)
Definition UnrealMathUtility.h:897
static constexpr T DivideAndRoundNearest(T Dividend, T Divisor)
Definition UnrealMathUtility.h:708
static constexpr UE_FORCEINLINE_HINT int32 Max3Index(const T A, const T B, const T C)
Definition UnrealMathUtility.h:564
static uint8 Quantize8UnsignedByte(float x)
Definition UnrealMathUtility.h:2410
static T InterpExpoIn(const T &A, const T &B, float Alpha)
Definition UnrealMathUtility.h:1341
static UE_FORCEINLINE_HINT bool RandBool()
Definition UnrealMathUtility.h:327
static UE_FORCEINLINE_HINT int32 RandHelper(int32 A)
Definition UnrealMathUtility.h:274
static T InterpSinIn(const T &A, const T &B, float Alpha)
Definition UnrealMathUtility.h:1316
static constexpr UE_FORCEINLINE_HINT float RadiansToDegrees(float const &RadVal)
Definition UnrealMathUtility.h:862
static T InterpSinInOut(const T &A, const T &B, float Alpha)
Definition UnrealMathUtility.h:1332
static constexpr UE_FORCEINLINE_HINT bool IsWithinInclusive(const T &TestValue, const U &MinValue, const U &MaxValue)
Definition UnrealMathUtility.h:376
Definition TwoVectors.h:15
Definition UnrealMathUtility.h:261
static constexpr bool Value
Definition UnrealMathUtility.h:262
Definition NumericLimits.h:41