initial
This commit is contained in:
49
public/mathlib/ssecholesky.h
Normal file
49
public/mathlib/ssecholesky.h
Normal file
@@ -0,0 +1,49 @@
|
||||
//========= Copyright c 1996-2009, Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//
|
||||
//=============================================================================//
|
||||
#ifndef SSE_CHOLESKY_HDR
|
||||
#define SSE_CHOLESKY_HDR
|
||||
|
||||
#include "mathlib/vector.h"
|
||||
#include "mathlib/mathlib.h"
|
||||
#include "mathlib/ssemath.h"
|
||||
|
||||
// This class holds cholesky decomposition of Four 3x3 matrices
|
||||
struct SimdCholesky3x3_t
|
||||
{
|
||||
/// lower diagonal matrix L such that LL' = input matrix
|
||||
fltx4 m_10, m_20, m_21; // These are off-diagonals used in compuations
|
||||
fltx4 m_inv00, m_inv11, m_inv22; // These are reciprocals of diagonals used in all computations
|
||||
public:
|
||||
/// @group Construction and initialization {
|
||||
SimdCholesky3x3_t( const fltx4 &a00, const fltx4 & a10, const fltx4 & a11, const fltx4 & a20, const fltx4 & a21, const fltx4 & a22 )
|
||||
{
|
||||
Init( a00, a10, a11, a20, a21, a22 );
|
||||
}
|
||||
void Init( const fltx4 & a00, const fltx4 & a10, const fltx4 & a11, const fltx4 & a20, const fltx4 & a21, const fltx4 & a22 );
|
||||
|
||||
//@}
|
||||
|
||||
bool IsValid( )const ;
|
||||
fltx4 GetValidMask( )const;
|
||||
|
||||
const FourVectors SolveRight( const FourVectors &b );
|
||||
const FourVectors SolveLeft( const FourVectors &b );
|
||||
|
||||
/// Using this decomposition LL', solve the following equation and return the result: LL' x = rhs
|
||||
const FourVectors Solve( const FourVectors &rhs )
|
||||
{
|
||||
// L R x = b
|
||||
// R x = L^-1 b
|
||||
// x = R^-1 L^-1 b
|
||||
return SolveRight( SolveLeft( rhs ) );
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user