8 template <
typename T,
int d>
106 template <
typename T>
109 return (
A > 0 &&
B > 0) || (
A < 0 &&
B < 0);
112 template <
typename T>
138 const T
Eps2 = (
X0*std::numeric_limits<T>::min()).SizeSquared();
214 for (
int32 Idx = 0; Idx < 3; ++Idx)
263 template <
typename T>
415 if (
TriNormal2 > std::numeric_limits<T>::min())
427 template <
typename T>
456 FSimplex SubIdxs[4] = { {1,2,3}, {0,2,3}, {0,1,3}, {0,1,2} };
463 for (
int Idx = 0; Idx < 4; ++Idx)
500 template <
typename T>
525 TVec3<T> SubSimplices[4][3] = { {
Simplex[1],
Simplex[2],
Simplex[3]}, {
Simplex[0],
Simplex[2],
Simplex[3]}, {
Simplex[0],
Simplex[1],
Simplex[3]}, {
Simplex[0],
Simplex[1],
Simplex[2]} };
526 TVec3<T> SubAs[4][3] = { {
A[1],
A[2],
A[3]}, {
A[0],
A[2],
A[3]}, {
A[0],
A[1],
A[3]}, {
A[0],
A[1],
A[2]} };
527 TVec3<T> SubBs[4][3] = { {
B[1],
B[2],
B[3]}, {
B[0],
B[2],
B[3]}, {
B[0],
B[1],
B[3]}, {
B[0],
B[1],
B[2]} };
534 for (
int Idx = 0; Idx < 4; ++Idx)
562 for (
int i = 0; i < 3; i++)
573 template <
typename T>
576 const T D0 = Data[Idxs[0]];
577 const T D1 = Data[Idxs[1]];
578 const T D2 = Data[Idxs[2]];
579 const T D3 = Data[Idxs[3]];
586 template <
typename T>
594 ClosestPoint =
Simplex[Idxs[0]];
break;
635 template <
typename T>
#define check(expr)
Definition AssertionMacros.h:314
#define ensure( InExpression)
Definition AssertionMacros.h:464
@ INDEX_NONE
Definition CoreMiscDefines.h:150
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition SkeletalMeshComponent.h:307
TVec3< T > TriangleSimplexFindOrigin(const TVec3< T > *Simplex, FSimplex &Idxs, T *OutBarycentric)
Definition Simplex.h:113
TVector< T, d > LineSimplexFindOrigin(const TVector< T, d > *Simplex, int32 *Idxs, int32 &NumVerts, T *OutBarycentric)
Definition Simplex.h:9
TVec3< T > TetrahedronSimplexFindOrigin2(TVec3< T > *Simplex, int32 &NumVerts, T *OutBarycentric, TVec3< T > *A, TVec3< T > *B)
Definition Simplex.h:501
TVector< FReal, 3 > FVec3
Definition Core.h:17
TVec3< T > TriangleSimplexFindOrigin2(TVec3< T > *Simplex, int32 &NumVerts, T *OutBarycentric, TVec3< T > *As, TVec3< T > *Bs)
Definition Simplex.h:264
void ReorderGJKArray(T *Data, FSimplex &Idxs)
Definition Simplex.h:574
TVec3< T > TetrahedronSimplexFindOrigin(const TVec3< T > *Simplex, FSimplex &Idxs, T *OutBarycentric)
Definition Simplex.h:428
TVec3< T > LineSimplexFindOrigin2(TVec3< T > *Simplex, int32 &NumVerts, T *OutBarycentric, TVec3< T > *A, TVec3< T > *B)
Definition Simplex.h:45
TVec3< T > SimplexFindClosestToOrigin2(TVec3< T > *Simplex, int32 &NumVerts, T *OutBarycentric, TVec3< T > *A, TVec3< T > *B)
Definition Simplex.h:636
bool SignMatch(T A, T B)
Definition Simplex.h:107
TVec3< T > SimplexFindClosestToOrigin(TVec3< T > *Simplex, FSimplex &Idxs, T *OutBarycentric, TVec3< T > *A=nullptr, TVec3< T > *B=nullptr)
Definition Simplex.h:587
int32 & operator[](int32 Idx)
Definition Simplex.h:88
int32 NumVerts
Definition Simplex.h:85
int32 operator[](int32 Idx) const
Definition Simplex.h:87
FSimplex(std::initializer_list< int32 > InIdxs={})
Definition Simplex.h:90
int32 Idxs[4]
Definition Simplex.h:86
static constexpr UE_FORCEINLINE_HINT T Clamp(const T X, const T MinValue, const T MaxValue)
Definition UnrealMathUtility.h:592