15 using Scalar =
typename Base::Scalar;
16 static constexpr int Options = Base::Options;
28 template <
typename... BaseCtorArgs>
33 this->ndx_ = 2 *
base_.ndx();
38 return base_.isNormalized(p);
45 template <
typename Po
int>
46 typename Point::ConstSegmentReturnType
48 return x.head(
base_.nx());
51 template <
typename Po
int>
52 typename Point::SegmentReturnType
54 return x.const_cast_derived().head(
base_.nx());
57 template <
typename Tangent>
58 typename Tangent::ConstSegmentReturnType
60 return v.head(
base_.ndx());
63 template <
typename Tangent>
64 typename Tangent::SegmentReturnType
66 return v.const_cast_derived().head(
base_.ndx());
69 template <
typename Jac>
70 Eigen::Block<Jac, Eigen::Dynamic, Eigen::Dynamic>
72 return J.const_cast_derived().topLeftCorner(
base_.ndx(),
base_.ndx());
88 MatrixRef Jout,
int arg)
const;
91 const ConstVectorRef &v, MatrixRef Jout,
95 MatrixRef Jout,
int arg)
const;
98 const Scalar &u, VectorRef out)
const;
103#include "aligator/modelling/spaces/tangent-bundle.hxx"
ManifoldAbstractTpl(int nx, int ndx)
void Jdifference_impl(const ConstVectorRef &x0, const ConstVectorRef &x1, MatrixRef Jout, int arg) const
Point::SegmentReturnType getBasePointWrite(const Eigen::MatrixBase< Point > &x) const
void interpolate_impl(const ConstVectorRef &x0, const ConstVectorRef &x1, const Scalar &u, VectorRef out) const
Interpolation operation.
typename Base::Scalar Scalar
TangentBundleTpl(BaseCtorArgs... args)
Constructor using base space constructor.
void rand_impl(VectorRef out) const
Tangent::SegmentReturnType getTangentHeadWrite(const Eigen::MatrixBase< Tangent > &v) const
void neutral_impl(VectorRef out) const
void integrate_impl(const ConstVectorRef &x, const ConstVectorRef &dx, VectorRef out) const
Perform the manifold integration operation.
int nx() const
Get manifold representation dimension.
const Base & getBaseSpace() const
Point::ConstSegmentReturnType getBasePoint(const Eigen::MatrixBase< Point > &x) const
void JintegrateTransport_impl(const ConstVectorRef &x, const ConstVectorRef &v, MatrixRef Jout, int arg) const
bool isNormalized(const ConstVectorRef &x) const
Check if the input vector x is a viable element of the manifold.
void Jintegrate_impl(const ConstVectorRef &x, const ConstVectorRef &v, MatrixRef Jout, int arg) const
int ndx() const
Get manifold tangent space dimension.
ALIGATOR_DYNAMIC_TYPEDEFS(Scalar)
Eigen::Block< Jac, Eigen::Dynamic, Eigen::Dynamic > getBaseJacobian(const Eigen::MatrixBase< Jac > &J) const
ManifoldAbstractTpl< Scalar > ManifoldBase
void difference_impl(const ConstVectorRef &x0, const ConstVectorRef &x1, VectorRef out) const
Implementation of the manifold retraction operation.
TangentBundleTpl(const Base &base)
Constructor using base space instance.
static constexpr int Options
TangentBundleTpl< Base > Self
Tangent::ConstSegmentReturnType getBaseTangent(const Tangent &v) const