Go to the documentation of this file.
20 class TGenericDerived,
27 using Impl = TGenericImpl<TScalar>;
31 class TOtherGenericDerived,
34 class TOtherGenericImpl>
39 Impl::kIsAxisDirectionPreserving;
41 Impl::kIsDirectionVectorPreserving;
45 Impl::kIisParallelLinePreserving;
47 static int constexpr
kDof = Impl::kDof;
52 template <
class TCompatibleScalar>
54 ScalarBinaryOpTraits<Scalar, TCompatibleScalar>::ReturnType;
58 template <
class TCompatibleScalar>
61 template <
class TCompatibleScalar>
64 template <
class TCompatibleScalar>
68 using Tangent = Eigen::Vector<Scalar, kDof>;
69 using Params = Eigen::Vector<Scalar, kNumParams>;
70 using Point = Eigen::Vector<Scalar, kPointDim>;
94 return Derived::fromParamsUnchecked(Impl::exp(tangent));
100 -> Eigen::Matrix<Scalar, kAmbientDim, kAmbientDim> {
101 return Impl::hat(tangent);
104 static auto vee(Eigen::Matrix<Scalar, kAmbientDim, kAmbientDim>
const& mat)
106 return Impl::vee(mat);
110 return Impl::hasShortestPathAmbiguity(this->
params_);
115 template <
class TCompatibleScalar>
116 auto operator*(TGenericDerived<TCompatibleScalar>
const& rhs)
const
118 auto params = Impl::multiplication(this->
params_, rhs.params());
128 return Derived::fromParams(Impl::inverse(this->
params_));
132 template <
class TMatrixDerived>
133 auto operator*(Eigen::MatrixBase<TMatrixDerived>
const& point)
const
135 return Impl::action(this->
params_, point.eval());
138 template <
class TCompatibleScalar>
142 return Impl::action(
params_, direction_vector);
148 return Impl::adj(this->
params_);
153 return this->
exp(tangent) *
self();
158 return self() *
exp(tangent);
162 return (
self() * other.inverse()).log();
166 return (other.inverse() *
self()).log();
173 return Impl::compactMatrix(this->
params_);
178 return Impl::matrix(this->
params_);
183 static auto ad(
Tangent const& tangent) -> Eigen::Matrix<Scalar, kDof, kDof> {
184 return Impl::ad(tangent);
192 static auto dxExpXAt0() -> Eigen::Matrix<Scalar, kNumParams, kDof> {
193 return Impl::dxExpXAt0();
197 -> Eigen::Matrix<Scalar, kPointDim, kDof> {
198 return Impl::dxExpXTimesPointAt0(point);
203 return Impl::dxThisMulExpXAt0(this->
params_);
208 return Impl::dxLogThisInvTimesXAtThis(this->
params_);
214 return Impl::tangentExamples();
218 return Impl::paramsExamples();
222 std::vector<Derived> out;
223 for (
auto const&
params : Derived::paramsExamples()) {
224 out.push_back(Derived::fromParams(
params));
230 return Impl::invalidParamsExamples();
237 [[nodiscard]]
auto ptr()
const {
return this->
params_.data(); }
243 auto maybe_valid = Impl::areParamsValid(
params);
254 return static_cast<Derived const&
>(*this);
Group(UninitTag)
Definition: lie_group.h:249
static auto toAmbient(Point const &point)
Definition: lie_group.h:145
static constexpr bool kIisParallelLinePreserving
Definition: lie_group.h:44
Eigen::Vector< Scalar, kNumParams > Params
Definition: lie_group.h:69
typename Eigen::ScalarBinaryOpTraits< Scalar, TCompatibleScalar >::ReturnType ScalarReturn
Definition: lie_group.h:54
auto dxLogThisInvTimesXAtThis() const -> Eigen::Matrix< Scalar, kDof, kNumParams >
Definition: lie_group.h:206
static auto hat(Tangent const &tangent) -> Eigen::Matrix< Scalar, kAmbientDim, kAmbientDim >
Definition: lie_group.h:99
static auto invalidParamsExamples() -> std::vector< Params >
Definition: lie_group.h:229
Eigen::Vector< Scalar, kDof > Tangent
Definition: lie_group.h:68
Definition: lie_group.h:24
Definition: lie_group.h:14
static constexpr bool kIsOriginPreserving
Definition: lie_group.h:37
#define SOPHUS_UNWRAP(...)
Definition: common.h:52
Image MutImage, owning images types.
Definition: num_diff.h:20
auto adj() const -> Eigen::Matrix< Scalar, kDof, kDof >
Definition: lie_group.h:147
static auto vee(Eigen::Matrix< Scalar, kAmbientDim, kAmbientDim > const &mat) -> Tangent
Definition: lie_group.h:104
auto operator*(TGenericDerived< TCompatibleScalar > const &rhs) const -> DerivedReturn< TCompatibleScalar >
Definition: lie_group.h:116
auto dxThisMulExpXAt0() const -> Eigen::Matrix< Scalar, kNumParams, kDof >
Definition: lie_group.h:201
auto operator*(UnitVector< TCompatibleScalar, kPointDim > const &direction_vector) const -> UnitVectorReturn< TCompatibleScalar >
Definition: lie_group.h:139
Eigen::Vector< Scalar, kPointDim > Point
Definition: lie_group.h:70
static auto elementExamples() -> std::vector< Derived >
Definition: lie_group.h:221
auto unsafeMutPtr()
Definition: lie_group.h:239
static auto dxExpXTimesPointAt0(Point const &point) -> Eigen::Matrix< Scalar, kPointDim, kDof >
Definition: lie_group.h:196
auto params() const -> Params const &
Definition: lie_group.h:235
static auto fromParams(Params const ¶ms) -> Derived
Definition: lie_group.h:79
static constexpr int kPointDim
Definition: lie_group.h:49
auto leftPlus(Tangent const &tangent) const -> Derived
Definition: lie_group.h:152
static constexpr bool kIisSizePreserving
Definition: lie_group.h:43
Params params_
Definition: lie_group.h:265
static constexpr int kDof
Definition: lie_group.h:47
static constexpr int kAmbientDim
Definition: lie_group.h:50
void setParamsUnchecked(Params const ¶ms)
Definition: lie_group.h:263
auto inverse() const -> Derived
Definition: lie_group.h:127
auto rightMinus(Derived const &other) const -> Tangent
Definition: lie_group.h:165
void setParams(Params const ¶ms)
Definition: lie_group.h:241
static constexpr bool kIsDirectionVectorPreserving
Definition: lie_group.h:40
static constexpr bool kIsAxisDirectionPreserving
Definition: lie_group.h:38
auto hasShortestPathAmbiguity() -> bool
Definition: lie_group.h:109
static auto tangentExamples() -> std::vector< Tangent >
Definition: lie_group.h:213
static auto identity() -> Derived
Definition: lie_group.h:85
auto compactMatrix() const -> Eigen::Matrix< Scalar, kPointDim, kAmbientDim >
Definition: lie_group.h:171
static auto paramsExamples() -> std::vector< Params >
Definition: lie_group.h:217
Eigen::Vector< ScalarReturn< TCompatibleScalar >, kPointDim > PointReturn
Definition: lie_group.h:62
auto log() const -> Tangent
Definition: lie_group.h:97
auto matrix() const -> Eigen::Matrix< Scalar, kAmbientDim, kAmbientDim >
Definition: lie_group.h:176
TScalar Scalar
Definition: lie_group.h:26
auto operator=(Group const &) -> Group &=default
auto operator*(Eigen::MatrixBase< TMatrixDerived > const &point) const -> PointReturn< typename TMatrixDerived::Scalar >
Definition: lie_group.h:133
auto operator*=(Derived const &rhs) -> Derived &
Definition: lie_group.h:122
Definition: rotation2.h:20
static auto ad(Tangent const &tangent) -> Eigen::Matrix< Scalar, kDof, kDof >
Definition: lie_group.h:183
friend class Group
Definition: lie_group.h:35
static auto fromParamsUnchecked(Params const ¶ms) -> Derived
Definition: lie_group.h:257
static auto exp(Tangent const &tangent) -> Derived
Definition: lie_group.h:93
static constexpr bool kIsShapePreserving
Definition: lie_group.h:42
static auto dxExpXAt0() -> Eigen::Matrix< Scalar, kNumParams, kDof >
Definition: lie_group.h:192
static constexpr int kNumParams
Definition: lie_group.h:48
Definition: rotation2.h:19
auto rightPlus(Tangent const &tangent) const -> Derived
Definition: lie_group.h:157
auto ptr() const
Definition: lie_group.h:237
auto leftMinus(Derived const &other) const -> Tangent
Definition: lie_group.h:161
Group()
Definition: lie_group.h:74