PhysicsBasedAnimationToolkit 0.0.10
Cross-platform C++20 library of algorithms and data structures commonly used in computer graphics research on physically-based simulation.
Loading...
Searching...
No Matches
SelectionMatrix.h
1#ifndef PBAT_MATH_LINALG_SELECTION_MATRIX_H
2#define PBAT_MATH_LINALG_SELECTION_MATRIX_H
3
4#include "pbat/Aliases.h"
5
6namespace pbat {
7namespace math {
8namespace linalg {
9
18template <class TDerivedC>
19CSCMatrix SelectionMatrix(Eigen::DenseBase<TDerivedC> const& C, Index n = Index(-1))
20{
21 if (n < 0)
22 n = C.maxCoeff() + 1;
23 CSCMatrix S(n, C.size());
24 S.reserve(IndexVectorX::Ones(C.size()));
25 for (auto c = 0; c < C.size(); ++c)
26 S.insert(C(c), c) = Scalar(1);
27 return S;
28}
29
30} // namespace linalg
31} // namespace math
32} // namespace pbat
33
34#endif // PBAT_MATH_LINALG_SELECTION_MATRIX_H
Linear Algebra related functionality.
Definition FilterEigenvalues.h:7
CSCMatrix SelectionMatrix(Eigen::DenseBase< TDerivedC > const &C, Index n=Index(-1))
Construct the selection matrix S s.t. X*S selects all columns C of X.
Definition SelectionMatrix.h:19
Math related functionality.
Definition Concepts.h:19
The main namespace of the library.
Definition Aliases.h:15
Eigen::SparseMatrix< Scalar, Eigen::ColMajor > CSCMatrix
Column-major sparse matrix type.
Definition Aliases.h:52
std::ptrdiff_t Index
Index type.
Definition Aliases.h:17
double Scalar
Scalar type.
Definition Aliases.h:18