GCC Code Coverage Report


Directory: ./
File: include/pinocchio/math/gram-schmidt-orthonormalisation.hpp
Date: 2024-08-27 18:20:05
Exec Total Coverage
Lines: 0 9 0.0%
Branches: 0 48 0.0%

Line Branch Exec Source
1 //
2 // Copyright (c) 2024 INRIA
3 //
4
5 #ifndef __pinocchio_math_gram_schmidt_orthonormalisation_hpp__
6 #define __pinocchio_math_gram_schmidt_orthonormalisation_hpp__
7
8 #include "pinocchio/math/fwd.hpp"
9 #include <Eigen/Core>
10
11 namespace pinocchio
12 {
13 ///  \brief Perform the Gram-Schmidt orthonormalisation on the input/output vector for a given
14 /// input basis
15 ///
16 ///  \param[in] basis Orthonormal basis
17 ///  \param[in,out] vec Vector to orthonomarlize wrt the input basis
18 ///
19 template<typename MatrixType, typename VectorType>
20 void orthonormalisation(
21 const Eigen::MatrixBase<MatrixType> & basis, const Eigen::MatrixBase<VectorType> & vec_)
22 {
23 typedef typename VectorType::Scalar Scalar;
24 VectorType & vec = vec_.const_cast_derived();
25
26 PINOCCHIO_CHECK_ARGUMENT_SIZE(basis.rows(), vec.size());
27 assert((basis.transpose() * basis).isIdentity() && "The input basis is not orthonormal.");
28
29 for (Eigen::DenseIndex col_id = 0; col_id < basis.cols(); ++col_id)
30 {
31 const auto col = basis.col(col_id);
32 const Scalar alpha = col.dot(vec);
33 vec -= alpha * col;
34 }
35
36 assert((basis.transpose() * vec).isZero());
37 }
38 } // namespace pinocchio
39
40 #endif // ifndef __pinocchio_math_gram_schmidt_orthonormalisation_hpp__
41