18 #ifndef __se3_cartesian_axis_hpp__ 19 #define __se3_cartesian_axis_hpp__ 29 enum { axis = _axis, dim = 3 };
31 template<
typename V3_in,
typename V3_out>
32 inline static void cross(
const Eigen::MatrixBase<V3_in> & vin,
33 const Eigen::MatrixBase<V3_out> & vout);
36 static typename EIGEN_PLAIN_TYPE(V3) cross(
const Eigen::MatrixBase<V3> & vin)
38 typename EIGEN_PLAIN_TYPE(V3) res;
43 template<
typename Scalar>
44 Eigen::Matrix<Scalar,dim,1> operator*(
const Scalar & s)
const 46 typedef Eigen::Matrix<Scalar,dim,1> ReturnType;
48 for(Eigen::DenseIndex i = 0; i < dim; ++i)
49 res[i] = i == axis ? s : Scalar(0);
54 template<
typename Scalar>
55 friend inline Eigen::Matrix<Scalar,dim,1>
64 template<
typename V3_in,
typename V3_out>
66 const Eigen::MatrixBase<V3_out> & vout)
68 EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(V3_in,3)
69 EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(V3_out,3)
70 V3_out & vout_ =
const_cast<Eigen::MatrixBase<V3_out> &
>(vout).derived();
71 vout_[0] = 0.; vout_[1] = -vin[2]; vout_[2] = vin[1];
75 template<
typename V3_in,
typename V3_out>
77 const Eigen::MatrixBase<V3_out> & vout)
79 EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(V3_in,3)
80 EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(V3_out,3)
81 V3_out & vout_ =
const_cast<Eigen::MatrixBase<V3_out> &
>(vout).derived();
82 vout_[0] = vin[2]; vout_[1] = 0.; vout_[2] = -vin[0];
86 template<
typename V3_in,
typename V3_out>
88 const Eigen::MatrixBase<V3_out> & vout)
90 EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(V3_in,3)
91 EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(V3_out,3)
92 V3_out & vout_ =
const_cast<Eigen::MatrixBase<V3_out> &
>(vout).derived();
93 vout_[0] = -vin[1]; vout_[1] = vin[0]; vout_[2] = 0.;
102 #endif // __se3_cartesian_axis_hpp__