humoto
cross_product.h
Go to the documentation of this file.
1 /**
2  @file
3  @author Alexander Sherikov
4  @copyright 2014-2017 INRIA. Licensed under the Apache License, Version 2.0.
5  (see @ref LICENSE or http://www.apache.org/licenses/LICENSE-2.0)
6 
7  @brief
8 */
9 
10 #pragma once
11 
12 
13 namespace etools
14 {
15  /**
16  * @brief Skew-symmetric cross product matrix
17  */
19  {
20  private:
21  etools::Vector3 vector_;
22 
23 
24  public:
25  /**
26  * @brief Default constructor
27  *
28  * @param[in] vector 3d vector
29  */
30  explicit CrossProductMatrix(const etools::Vector3 &vector) : vector_(vector)
31  {
32  }
33 
34 
35  /**
36  * @brief Static function for transformation of a vector to cross product matrix.
37  *
38  * @param[in] vector
39  *
40  * @return cross product matrix
41  */
42  static etools::Matrix3 eval(const etools::Vector3 &vector)
43  {
44  return ( (etools::Matrix3() << 0.0, -vector.z(), vector.y(),
45  vector.z(), 0.0, -vector.x(),
46  -vector.y(), vector.x(), 0.0).finished() );
47  }
48 
49 
50  /**
51  * @brief Evaluate this to matrix.
52  *
53  * @return cross product matrix.
54  */
56  {
57  return(eval(vector_));
58  }
59 
60 
61  /**
62  * @brief matrix * this
63  *
64  * @tparam t_DerivedInput Eigen parameter
65  * @tparam t_DerivedOutput Eigen parameter
66  *
67  * @param[out] result
68  * @param[in] matrix
69  */
70  template< class t_DerivedInput,
71  class t_DerivedOutput>
72  void multiplyLeft( Eigen::PlainObjectBase<t_DerivedOutput> &result,
73  const Eigen::MatrixBase<t_DerivedInput> &matrix) const
74  {
75  result.noalias() = matrix * eval();
76  }
77 
78 
79  /**
80  * @brief this * matrix
81  *
82  * @tparam t_DerivedInput Eigen parameter
83  * @tparam t_DerivedOutput Eigen parameter
84  *
85  * @param[out] result
86  * @param[in] matrix
87  */
88  template< class t_DerivedInput,
89  class t_DerivedOutput>
90  void multiplyRight( Eigen::PlainObjectBase<t_DerivedOutput> &result,
91  const Eigen::MatrixBase<t_DerivedInput> &matrix) const
92  {
93  result.noalias() = vector_.cross(matrix);
94  }
95  };
96 
97 
98 
99  /**
100  * @brief Multiplication operator
101  *
102  * @tparam t_Derived Eigen parameter
103  *
104  * @param[in] left
105  * @param[in] right
106  *
107  * @return result of multiplication
108  */
109  template<class t_Derived>
110  Eigen::Matrix< etools::DefaultScalar,
111  Eigen::DenseBase<t_Derived>::RowsAtCompileTime,
112  3>
114  operator* ( const Eigen::MatrixBase<t_Derived> & left,
115  const CrossProductMatrix & right)
116  {
117  Eigen::Matrix< etools::DefaultScalar,
118  Eigen::DenseBase<t_Derived>::RowsAtCompileTime,
119  3> result;
120  right.multiplyLeft(result, left);
121  return (result);
122  }
123 
124 
125 
126  /**
127  * @brief Multiplication operator
128  *
129  * @tparam t_Derived Eigen parameter
130  *
131  * @param[in] left
132  * @param[in] right
133  *
134  * @return result of multiplication
135  */
136  template<class t_Derived>
137  Eigen::Matrix< etools::DefaultScalar,
138  3,
139  Eigen::DenseBase<t_Derived>::ColsAtCompileTime>
142  const Eigen::MatrixBase<t_Derived> & right)
143  {
144  Eigen::Matrix< etools::DefaultScalar,
145  3,
146  Eigen::DenseBase<t_Derived>::ColsAtCompileTime> result;
147  left.multiplyRight(result, right);
148  return (result);
149  }
150 }
CrossProductMatrix(const etools::Vector3 &vector)
Default constructor.
Definition: cross_product.h:30
void multiplyRight(Eigen::PlainObjectBase< t_DerivedOutput > &result, const Eigen::MatrixBase< t_DerivedInput > &matrix) const
this * matrix
Definition: cross_product.h:90
EIGENTOOLS_VISIBILITY_ATTRIBUTE operator*(const BlockMatrixBase< t_MatrixType, t_block_rows_num, t_block_cols_num, t_sparsity_type > &bm, const Eigen::MatrixBase< t_Derived > &matrix)
&#39;BlockMatrixBase * Eigen::Matrix&#39; operator
etools::Matrix3 eval() const
Evaluate this to matrix.
Definition: cross_product.h:55
static etools::Matrix3 eval(const etools::Vector3 &vector)
Static function for transformation of a vector to cross product matrix.
Definition: cross_product.h:42
#define EIGENTOOLS_VISIBILITY_ATTRIBUTE
Definition: eigentools.h:21
double DefaultScalar
Definition: eigentools.h:38
void multiplyLeft(Eigen::PlainObjectBase< t_DerivedOutput > &result, const Eigen::MatrixBase< t_DerivedInput > &matrix) const
matrix * this
Definition: cross_product.h:72
Skew-symmetric cross product matrix.
Definition: cross_product.h:18
This namespace contains various functions operating on Eigen matrices and vectors.
Definition: blockmatrix.h:19
EIGENTOOLS_CONSTANT_SIZE_MATRIX Matrix3
Definition: eigentools.h:77