예제 #1
0
 void ExpMapQuaternion::applyDiffPseudoLog0_(
     RefMat out, const ConstRefMat& in, const ConstRefVec& x, ReusableTemporaryMap& m)
 {
   mnf_assert(in.cols() == InputDim_ && "Dimensions mismatch" );
   Eigen::Map<Eigen::MatrixXd, Eigen::Aligned> a = m.getMap(in.rows(),OutputDim_);
   a.noalias() = in*diffPseudoLog0_(x);
   out = a;
 }
예제 #2
0
void Manifold::applyDiffPseudoLog0(RefMat out, const ConstRefMat& in,
                                   const ConstRefVec& x) const
{
  mnf_assert(isValid() || seeMessageAbove());
  mnf_assert(out.cols() == representationDim_);
  mnf_assert(in.cols() == tangentDim_);
  mnf_assert(in.rows() == out.rows());
  mnf_assert(x.size() == representationDim_);
  applyDiffPseudoLog0_(out, in, x);
}
예제 #3
0
void Manifold::applyTransport(RefMat out, const ConstRefMat& in,
                              const ConstRefVec& x, const ConstRefVec& v) const
{
  mnf_assert(isValid() || seeMessageAbove());
  mnf_assert(in.rows() == tangentDim_);
  mnf_assert(out.rows() == tangentDim_);
  mnf_assert(in.cols() == out.cols());
  mnf_assert(x.size() == representationDim());
  mnf_assert(v.size() == tangentDim_);
  mnf_assert(isInTxM(x, v));

  applyTransport_(out, in, x, v);
}