1.0.0 API documentation
Functions

Functions

template<length_t D, typename T , qualifier Q, typename I >
GLM_FUNC_DECL mat< D, D, T, Q > computeCovarianceMatrix (I const &b, I const &e)
 Compute a covariance matrix form a pair of iterators b (begin) and e (end) of a container with relative coordinates (e.g., relative to the center of gravity of the object) Dereferencing an iterator of type I must yield a vec<D, T, Qgt;
 
template<length_t D, typename T , qualifier Q, typename I >
GLM_FUNC_DECL mat< D, D, T, Q > computeCovarianceMatrix (I const &b, I const &e, vec< D, T, Q > const &c)
 Compute a covariance matrix form a pair of iterators b (begin) and e (end) of a container with absolute coordinates and a precomputed center of gravity c Dereferencing an iterator of type I must yield a vec<D, T, Qgt;
 
template<length_t D, typename T , qualifier Q>
GLM_INLINE mat< D, D, T, Q > computeCovarianceMatrix (vec< D, T, Q > const *v, size_t n)
 Compute a covariance matrix form an array of relative coordinates v (e.g., relative to the center of gravity of the object) More...
 
template<length_t D, typename T , qualifier Q>
GLM_INLINE mat< D, D, T, Q > computeCovarianceMatrix (vec< D, T, Q > const *v, size_t n, vec< D, T, Q > const &c)
 Compute a covariance matrix form an array of absolute coordinates v and a precomputed center of gravity c More...
 
template<length_t D, typename T , qualifier Q>
GLM_FUNC_DECL unsigned int findEigenvaluesSymReal (mat< D, D, T, Q > const &covarMat, vec< D, T, Q > &outEigenvalues, mat< D, D, T, Q > &outEigenvectors)
 Assuming the provided covariance matrix covarMat is symmetric and real-valued, this function find the D Eigenvalues of the matrix, and also provides the corresponding Eigenvectors. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL void sortEigenvalues (vec< 2, T, Q > &eigenvalues, mat< 2, 2, T, Q > &eigenvectors)
 Sorts a group of Eigenvalues&Eigenvectors, for largest Eigenvalue to smallest Eigenvalue. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL void sortEigenvalues (vec< 3, T, Q > &eigenvalues, mat< 3, 3, T, Q > &eigenvectors)
 Sorts a group of Eigenvalues&Eigenvectors, for largest Eigenvalue to smallest Eigenvalue. More...
 
template<typename T , qualifier Q>
GLM_FUNC_DECL void sortEigenvalues (vec< 4, T, Q > &eigenvalues, mat< 4, 4, T, Q > &eigenvectors)
 Sorts a group of Eigenvalues&Eigenvectors, for largest Eigenvalue to smallest Eigenvalue. More...
 

Detailed Description

Include <glm/gtx/pca.hpp> to use the features of this extension.

Implements functions required for fundamental 'princple component analysis' in 2D, 3D, and 4D: 1) Computing a covariance matrics from a list of relative position vectors 2) Compute the eigenvalues and eigenvectors of the covariance matrics This is useful, e.g., to compute an object-aligned bounding box from vertices of an object. https://en.wikipedia.org/wiki/Principal_component_analysis

Example:

std::vector<glm::dvec3> ptData;
// ... fill ptData with some point data, e.g. vertices
glm::dvec3 center = computeCenter(ptData);
glm::dmat3 covarMat = glm::computeCovarianceMatrix(ptData.data(), ptData.size(), center);
glm::dvec3 evals;
glm::dmat3 evecs;
int evcnt = glm::findEigenvaluesSymReal(covarMat, evals, evecs);
if(evcnt != 3)
// ... error handling
glm::sortEigenvalues(evals, evecs);
// ... now evecs[0] points in the direction (symmetric) of the largest spatial distribution within ptData

Function Documentation

◆ computeCovarianceMatrix() [1/2]

GLM_INLINE mat<D, D, T, Q> glm::computeCovarianceMatrix ( vec< D, T, Q > const *  v,
size_t  n 
)

Compute a covariance matrix form an array of relative coordinates v (e.g., relative to the center of gravity of the object)

Parameters
vPoints to a memory holding n times vectors
nNumber of points in v

◆ computeCovarianceMatrix() [2/2]

GLM_INLINE mat<D, D, T, Q> glm::computeCovarianceMatrix ( vec< D, T, Q > const *  v,
size_t  n,
vec< D, T, Q > const &  c 
)

Compute a covariance matrix form an array of absolute coordinates v and a precomputed center of gravity c

Parameters
vPoints to a memory holding n times vectors
nNumber of points in v
cPrecomputed center of gravity

◆ findEigenvaluesSymReal()

GLM_FUNC_DECL unsigned int glm::findEigenvaluesSymReal ( mat< D, D, T, Q > const &  covarMat,
vec< D, T, Q > &  outEigenvalues,
mat< D, D, T, Q > &  outEigenvectors 
)

Assuming the provided covariance matrix covarMat is symmetric and real-valued, this function find the D Eigenvalues of the matrix, and also provides the corresponding Eigenvectors.

Note: the data in outEigenvalues and outEigenvectors are in matching order, i.e. outEigenvector[i] is the Eigenvector of the Eigenvalue outEigenvalue[i]. This is a numeric implementation to find the Eigenvalues, using 'QL decomposition` (variant of QR decomposition: https://en.wikipedia.org/wiki/QR_decomposition).

Parameters
[in]covarMatA symmetric, real-valued covariance matrix, e.g. computed from computeCovarianceMatrix
[out]outEigenvaluesVector to receive the found eigenvalues
[out]outEigenvectorsMatrix to receive the found eigenvectors corresponding to the found eigenvalues, as column vectors
Returns
The number of eigenvalues found, usually D if the precondition of the covariance matrix is met.

◆ sortEigenvalues() [1/3]

GLM_FUNC_DECL void glm::sortEigenvalues ( vec< 2, T, Q > &  eigenvalues,
mat< 2, 2, T, Q > &  eigenvectors 
)

Sorts a group of Eigenvalues&Eigenvectors, for largest Eigenvalue to smallest Eigenvalue.

The data in outEigenvalues and outEigenvectors are assumed to be matching order, i.e. outEigenvector[i] is the Eigenvector of the Eigenvalue outEigenvalue[i].

◆ sortEigenvalues() [2/3]

GLM_FUNC_DECL void glm::sortEigenvalues ( vec< 3, T, Q > &  eigenvalues,
mat< 3, 3, T, Q > &  eigenvectors 
)

Sorts a group of Eigenvalues&Eigenvectors, for largest Eigenvalue to smallest Eigenvalue.

The data in outEigenvalues and outEigenvectors are assumed to be matching order, i.e. outEigenvector[i] is the Eigenvector of the Eigenvalue outEigenvalue[i].

◆ sortEigenvalues() [3/3]

GLM_FUNC_DECL void glm::sortEigenvalues ( vec< 4, T, Q > &  eigenvalues,
mat< 4, 4, T, Q > &  eigenvectors 
)

Sorts a group of Eigenvalues&Eigenvectors, for largest Eigenvalue to smallest Eigenvalue.

The data in outEigenvalues and outEigenvectors are assumed to be matching order, i.e. outEigenvector[i] is the Eigenvector of the Eigenvalue outEigenvalue[i].

glm::computeCovarianceMatrix
GLM_INLINE mat< D, D, T, Q > computeCovarianceMatrix(vec< D, T, Q > const *v, size_t n)
Compute a covariance matrix form an array of relative coordinates v (e.g., relative to the center of ...
glm::sortEigenvalues
GLM_FUNC_DECL void sortEigenvalues(vec< 2, T, Q > &eigenvalues, mat< 2, 2, T, Q > &eigenvectors)
Sorts a group of Eigenvalues&Eigenvectors, for largest Eigenvalue to smallest Eigenvalue.
glm::dmat3
mat< 3, 3, double, defaultp > dmat3
3 columns of 3 components matrix of double-precision floating-point numbers.
Definition: matrix_double3x3.hpp:20
glm::dvec3
vec< 3, double, defaultp > dvec3
3 components vector of double-precision floating-point numbers.
Definition: vector_double3.hpp:15
glm::findEigenvaluesSymReal
GLM_FUNC_DECL unsigned int findEigenvaluesSymReal(mat< D, D, T, Q > const &covarMat, vec< D, T, Q > &outEigenvalues, mat< D, D, T, Q > &outEigenvectors)
Assuming the provided covariance matrix covarMat is symmetric and real-valued, this function find the...