28 return Inertia.M[RowIndex][
ColIndex];
77 template<
int32 T_MAXELEMENTS>
131 return NRows * NCols;
386 M.
At(0, 0) =
InM.M[0][0];
387 M.
At(0, 1) =
InM.M[1][0];
388 M.
At(0, 2) =
InM.M[2][0];
389 M.
At(1, 0) =
InM.M[0][1];
390 M.
At(1, 1) =
InM.M[1][1];
391 M.
At(1, 2) =
InM.M[2][1];
392 M.
At(2, 0) =
InM.M[0][2];
393 M.
At(2, 1) =
InM.M[1][2];
394 M.
At(2, 2) =
InM.M[2][2];
408 M.
At(I, J) = (I == J) ?
D : 0;
464 template<
int32 T_EA,
int32 T_EB>
468 check(
A.NumColumns() ==
B.NumColumns());
469 check(
A.NumRows() ==
B.NumRows());
484 template<
int32 T_EA,
int32 T_EB>
488 check(
A.NumColumns() ==
B.NumColumns());
489 check(
A.NumRows() ==
B.NumRows());
506 template<
int32 T_EA,
int32 T_EB>
510 check(
A.NumColumns() ==
B.NumColumns());
511 check(
A.NumRows() ==
B.NumRows());
527 template<
int32 T_EA,
int32 T_EB>
531 check(
A.NumColumns() ==
B.NumRows());
552 template<
int32 T_EA,
int32 T_EB>
556 check(
A.NumRows() ==
B.NumRows());
577 template<
int32 T_EA,
int32 T_EB>
581 check(
A.NumColumns() ==
B.NumColumns());
602 template<
int32 T_EA,
int32 T_EB>
606 check(
A.NumRows() ==
B.NumColumns());
627 template<
int32 T_EA,
int32 T_EB>
631 check(
A.NumColumns() ==
B.NumRows());
653 template<
int32 T_EA,
int32 T_EB,
int32 T_EC>
657 check(
B.NumColumns() ==
C.NumRows());
658 check(
A.NumRows() ==
B.NumRows());
659 check(
A.NumRows() ==
C.NumColumns());
686 check(
A.NumColumns() == 6);
763 check(
B.NumColumns() == 6);
842 template<
int32 T_EA,
int32 T_EB>
898 check(
A.NumRows() ==
A.NumColumns());
899 const int32 N =
A.NumRows();
900 for (
int32 I = 0; I < N; ++I)
902 for (
int32 J = I; J < N; ++J)
905 for (
int32 K = I - 1; K >= 0; --K)
907 Sum -=
A.At(I, K) *
A.At(J, K);
916 A.At(I, J) = FMath::Sqrt(Sum);
920 A.At(J, I) = Sum /
A.At(I, I);
925 for (
int32 I = 0; I < N; ++I)
927 for (
int32 J = 0; J < I; ++J)
945 template<
int32 T_EA,
int32 T_EB,
int32 T_EX>
948 check(
B.NumColumns() == 1);
949 check(
G.NumRows() ==
B.NumRows());
951 const int32 N =
G.NumRows();
952 X.SetDimensions(N, 1);
963 for (
int32 I = 0; I < N; ++I)
966 for (
int32 K = I - 1; K >= 0; --K)
968 Sum -=
G.At(I, K) *
X.At(K, 0);
970 X.At(I, 0) = Sum /
G.At(I, I);
974 for (
int32 I = N - 1; I >= 0; --I)
977 for (
int32 K = I + 1; K < N; ++K)
979 Sum -=
G.At(K, I) *
X.At(K, 0);
981 X.At(I, 0) = Sum /
G.At(I, I);
997 template<
int32 T_EA,
int32 T_EB,
int32 T_EX>
1000 check(
B.NumColumns() == 1);
1001 check(
A.NumRows() ==
B.NumRows());
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition DenseMatrix.h:886
static bool SolvePositiveDefinite(const TDenseMatrix< T_EA > &A, const TDenseMatrix< T_EB > &B, TDenseMatrix< T_EX > &X)
Definition DenseMatrix.h:998
static bool CholeskyFactorize(TDenseMatrix< T_E > &A)
Definition DenseMatrix.h:896
static void SolveCholeskyFactorized(const TDenseMatrix< T_EA > &G, const TDenseMatrix< T_EB > &B, TDenseMatrix< T_EX > &X)
Definition DenseMatrix.h:946
Definition DenseMatrix.h:17
const FReal I(int32 RowIndex, int32 ColIndex) const
Definition DenseMatrix.h:24
FReal M() const
Definition DenseMatrix.h:19
static FMassMatrix Make(const FReal InM, const FRotation3 &Q, const FMatrix33 &InI)
Definition DenseMatrix.h:41
static FMassMatrix Make(const FReal InM, const FMatrix33 &InI)
Definition DenseMatrix.h:31
static FMassMatrix Make(const FReal InM, FMatrix33 &&InI)
Definition DenseMatrix.h:36
Definition DenseMatrix.h:79
static TDenseMatrix< MaxElements > MultiplyAtBt(const TDenseMatrix< T_EA > &A, const TDenseMatrix< T_EB > &B)
Definition DenseMatrix.h:603
static TDenseMatrix< MaxElements > Make(const int32 InNumRows, const int32 InNumCols, const FReal *V, const int32 VLen)
Definition DenseMatrix.h:362
static TDenseMatrix< MaxElements > Make(const int32 InNumRows, const int32 InNumCols)
Definition DenseMatrix.h:345
FORCEINLINE void SetDimensions(const int32 InNumRows, const int32 InNumColumns)
Definition DenseMatrix.h:138
FORCEINLINE int32 NumColumns() const
Definition DenseMatrix.h:121
void Init(const int32 InNRows, const int32 InNCols, FReal V)
Definition DenseMatrix.h:181
static TDenseMatrix< MaxElements > MultiplyAB(const FMassMatrix &A, const TDenseMatrix< T_EB > &B)
Definition DenseMatrix.h:723
static const int32 MaxElements
Definition DenseMatrix.h:81
void SetRowAt(const int32 RowIndex, const int32 ColumnIndex, const FReal *V, const int32 NumV)
Definition DenseMatrix.h:236
void SetColumnAt(const int32 RowIndex, const int32 ColumnIndex, const FVec3 &V)
Definition DenseMatrix.h:275
void SetRowAt(const int32 RowIndex, const int32 ColumnIndex, const FVec3 &V)
Definition DenseMatrix.h:247
FORCEINLINE const FReal & At(const int32 RowIndex, const int32 ColumnIndex) const
Definition DenseMatrix.h:171
void SetBlockAt(const int32 RowOffset, const int32 ColumnOffset, const FMatrix33 &V)
Definition DenseMatrix.h:304
static TDenseMatrix< MaxElements > MultiplyAB_Symmetric(const TDenseMatrix< T_EA > &A, const TDenseMatrix< T_EB > &B)
Definition DenseMatrix.h:628
static TDenseMatrix< MaxElements > Transpose(const TDenseMatrix< T_EA > &A)
Definition DenseMatrix.h:430
FORCEINLINE void SetAt(const int32 RowIndex, const int32 ColumnIndex, const FReal V)
Definition DenseMatrix.h:190
static TDenseMatrix< MaxElements > Multiply(const FReal V, const TDenseMatrix< T_EA > &A)
Definition DenseMatrix.h:816
static TDenseMatrix< MaxElements > Negate(const TDenseMatrix< T_EA > &A)
Definition DenseMatrix.h:447
static TDenseMatrix< MaxElements > Make(const FVec3 &InM)
Definition DenseMatrix.h:370
static TDenseMatrix< MaxElements > MultiplyAB(const TDenseMatrix< T_EA > &A, const FMassMatrix &B)
Definition DenseMatrix.h:684
TDenseMatrix< MaxElements > & operator=(const TDenseMatrix< MaxElements > &A)
Definition DenseMatrix.h:100
static TDenseMatrix< MaxElements > Multiply(const TDenseMatrix< T_EA > &A, const FReal V)
Definition DenseMatrix.h:798
static TDenseMatrix< MaxElements > MakeDiagonal(const int32 InNumRows, const int32 InNumCols, const FReal D)
Definition DenseMatrix.h:401
void SetRowAt(const int32 RowIndex, const int32 ColumnIndex, const FReal V0, const FReal V1, const FReal V2)
Definition DenseMatrix.h:252
TDenseMatrix(const int32 InNRows, const int32 InNCols)
Definition DenseMatrix.h:89
static TDenseMatrix< MaxElements > MultiplyABt(const FMassMatrix &A, const TDenseMatrix< T_EB > &B)
Definition DenseMatrix.h:761
void SetDiagonal(FReal V)
Definition DenseMatrix.h:210
void SetBlockAtDiagonal33(const int32 RowOffset, const int32 ColumnOffset, const FReal VDiag, const FReal VOffDiag)
Definition DenseMatrix.h:320
static TDenseMatrix< MaxElements > MultiplyAtB(const TDenseMatrix< T_EA > &A, const TDenseMatrix< T_EB > &B)
Definition DenseMatrix.h:553
FORCEINLINE FReal & At(const int32 RowIndex, const int32 ColumnIndex)
Definition DenseMatrix.h:161
static TDenseMatrix< MaxElements > MultiplyABt(const TDenseMatrix< T_EA > &A, const TDenseMatrix< T_EB > &B)
Definition DenseMatrix.h:578
static TDenseMatrix< MaxElements > Add(const TDenseMatrix< T_EA > &A, const TDenseMatrix< T_EB > &B)
Definition DenseMatrix.h:465
TDenseMatrix()
Definition DenseMatrix.h:83
static TDenseMatrix< MaxElements > Make(const FMatrix33 &InM)
Definition DenseMatrix.h:382
static TDenseMatrix< MaxElements > Divide(const TDenseMatrix< T_EA > &A, const FReal V)
Definition DenseMatrix.h:825
static TDenseMatrix< MaxElements > Subtract(const TDenseMatrix< T_EA > &A, const TDenseMatrix< T_EB > &B)
Definition DenseMatrix.h:507
static TDenseMatrix< MaxElements > DotProduct(const TDenseMatrix< T_EA > &A, const TDenseMatrix< T_EB > &B)
Definition DenseMatrix.h:843
static TDenseMatrix< MaxElements > MakeIdentity(const int32 InDim)
Definition DenseMatrix.h:417
FORCEINLINE int32 NumRows() const
Definition DenseMatrix.h:113
static TDenseMatrix< MaxElements > Add_Symmetric(const TDenseMatrix< T_EA > &A, const TDenseMatrix< T_EB > &B)
Definition DenseMatrix.h:485
static TDenseMatrix< MaxElements > MultiplyAB(const TDenseMatrix< T_EA > &A, const TDenseMatrix< T_EB > &B)
Definition DenseMatrix.h:528
void SetDiagonalAt(int32 Start, int32 Num, FReal V)
Definition DenseMatrix.h:222
TDenseMatrix(const TDenseMatrix< MaxElements > &A)
Definition DenseMatrix.h:95
FORCEINLINE int32 AddRows(const int32 InNumRows)
Definition DenseMatrix.h:150
FORCEINLINE int32 NumElements() const
Definition DenseMatrix.h:129
void SetColumnAt(const int32 RowIndex, const int32 ColumnIndex, const FReal *V, const int32 NumV)
Definition DenseMatrix.h:265
static TDenseMatrix< MaxElements > Make(const int32 InNumRows, const int32 InNumCols, const FReal V)
Definition DenseMatrix.h:353
static TDenseMatrix< MaxElements > MultiplyBCAddA_Symmetric(const TDenseMatrix< T_EA > &A, const TDenseMatrix< T_EB > &B, const TDenseMatrix< T_EC > &C)
Definition DenseMatrix.h:654
void SetBlockAt(const int32 RowOffset, const int32 ColumnOffset, const TDenseMatrix< T_EA > &V)
Definition DenseMatrix.h:288
void Set(FReal V)
Definition DenseMatrix.h:198
FMatrix33 ComputeWorldSpaceInertia(const FRotation3 &CoMRotation, const FMatrix33 &I)
Definition Utilities.h:327
Definition SkeletalMeshComponent.h:307
@ X
Definition SimulationModuleBase.h:152
FRealDouble FReal
Definition Real.h:22
TRotation< FReal, 3 > FRotation3
Definition Core.h:19
PMatrix< FReal, 3, 3 > FMatrix33
Definition Core.h:20
U16 Index
Definition radfft.cpp:71