farm-ng-core
isometry2.h
Go to the documentation of this file.
1 // Copyright (c) 2011, Hauke Strasdat
2 // Copyright (c) 2012, Steven Lovegrove
3 // Copyright (c) 2021, farm-ng, inc.
4 //
5 // Use of this source code is governed by an MIT-style
6 // license that can be found in the LICENSE file or at
7 // https://opensource.org/licenses/MIT.
8 
9 #pragma once
10 
14 #include "sophus/lie/lie_group.h"
15 #include "sophus/lie/rotation2.h"
16 
17 namespace sophus {
18 
19 // definition: distance preserving mapping in R^2
20 // <==> shape and size preserving mapping in R^2
21 template <class TScalar>
22 class Isometry2
23  : public lie::Group<
24  Isometry2,
25  TScalar,
26  lie::WithDimAndSubgroup<2, lie::Rotation2Impl>::SemiDirectProduct> {
27  public:
28  using Scalar = TScalar;
29 
30  using Base = lie::Group<
31  Isometry2,
32  TScalar,
35 
36  using Tangent = typename Base::Tangent;
37  using Params = typename Base::Params;
38  using Point = typename Base::Point;
39 
40  Isometry2() = default;
41 
42  explicit Isometry2(UninitTag /*unused*/) : Base(UninitTag{}) {}
43 
45  Eigen::Vector<Scalar, 2> const& translation,
47  : Isometry2(UninitTag{}) {
48  this->params_.template head<2>() = rotation.params();
49  this->params_.template tail<2>() = translation;
50  }
51 
53  this->params_.template head<2>() = rotation.params();
54  }
55 
56  Isometry2(Eigen::Vector<Scalar, 2> const& translation) {
57  this->params_.template tail<2>() = translation;
58  }
59 
60  static auto fromRotationMatrix(Eigen::Matrix2<Scalar> const& mat_r)
61  -> Isometry2 {
63  }
64 
65  static auto fitFromComplex(Complex<Scalar> const& z) -> Isometry2 {
67  }
68 
69  static auto fromUnitComplex(Complex<Scalar> const& z) -> Isometry2 {
71  }
72 
73  static auto fromAngle(Scalar const& theta) -> Isometry2 {
74  return Isometry2(Rotation(theta));
75  }
76 
77  /// Construct a translation only Isometry3 instance.
78  ///
79  template <class TT0, class TT1>
80  static auto fromT(TT0 const& x, TT1 const& y) -> Isometry2 {
81  return Isometry2(Eigen::Vector2<Scalar>(x, y));
82  }
83 
84  /// Construct x-axis translation.
85  ///
86  static auto fromTx(Scalar const& x) -> Isometry2 {
87  return Isometry2::fromT(x, Scalar(0));
88  }
89 
90  /// Construct y-axis translation.
91  ///
92  static auto fromTy(Scalar const& y) -> Isometry2 {
93  return Isometry2::fromT(Scalar(0), y);
94  }
95 
96  template <class TOtherScalar>
97  auto cast() const -> Isometry2<TOtherScalar> {
99  this->params_.template cast<TOtherScalar>());
100  }
101 
102  auto translation() -> Eigen::VectorBlock<Params, 2> {
103  return this->params_.template tail<2>();
104  }
105 
106  [[nodiscard]] auto translation() const
107  -> Eigen::VectorBlock<Params const, 2> {
108  return this->params_.template tail<2>();
109  }
110 
111  [[nodiscard]] auto rotation() const -> Rotation2<Scalar> const {
113  this->params_.template head<Rotation2<Scalar>::kNumParams>());
114  }
115 
117  this->params_.template head<Rotation2<Scalar>::kNumParams>() =
118  rotation.params();
119  }
120 
121  [[nodiscard]] auto rotationMatrix() const -> Eigen::Matrix2<Scalar> {
122  return this->rotation().matrix();
123  }
124 
125  [[nodiscard]] auto unitComplex() const -> Complex<Scalar> {
126  return this->rotation().unitComplex();
127  }
128 
129  auto setUnitComplex(Complex<Scalar> const& z) const -> void {
131  }
132 
133  [[nodiscard]] auto angle() const -> Scalar {
134  return this->rotation().angle();
135  }
136 };
137 
140 
141 static_assert(concepts::Isometry2<Isometry2F64>);
142 
143 } // namespace sophus
sophus::Isometry2::rotation
auto rotation() const -> Rotation2< Scalar > const
Definition: isometry2.h:111
sophus::lie::Group< Isometry2, TScalar, lie::WithDimAndSubgroup< 2, lie::Rotation2Impl >::SemiDirectProduct >::Params
Eigen::Vector< Scalar, kNumParams > Params
Definition: lie_group.h:69
Eigen
Definition: params.h:72
sophus::Isometry2::fromTy
static auto fromTy(Scalar const &y) -> Isometry2
Construct y-axis translation.
Definition: isometry2.h:92
sophus::Isometry2::Isometry2
Isometry2(Rotation2< Scalar > const &rotation)
Definition: isometry2.h:52
sophus::lie::Group< Isometry2, TScalar, lie::WithDimAndSubgroup< 2, lie::Rotation2Impl >::SemiDirectProduct >::Tangent
Eigen::Vector< Scalar, kDof > Tangent
Definition: lie_group.h:68
sophus::Rotation2::fromRotationMatrix
static auto fromRotationMatrix(Eigen::Matrix2< TScalar > const &mat_r) -> Rotation2
Definition: rotation2.h:46
sophus::Isometry2::Rotation
Rotation2< Scalar > Rotation
Definition: isometry2.h:34
sophus::lie::Group
Definition: lie_group.h:24
sophus::Isometry2::fromAngle
static auto fromAngle(Scalar const &theta) -> Isometry2
Definition: isometry2.h:73
sophus::lie::TranslationFactorGroupProduct
Semi direct product of a Lie group (factor group) and the vector space (translation).
Definition: translation_factor_group_product.h:27
sophus
Image MutImage, owning images types.
Definition: num_diff.h:20
sophus::Isometry2::cast
auto cast() const -> Isometry2< TOtherScalar >
Definition: isometry2.h:97
sophus::Isometry2::Point
typename Base::Point Point
Definition: isometry2.h:38
sophus::Isometry2::fromTx
static auto fromTx(Scalar const &x) -> Isometry2
Construct x-axis translation.
Definition: isometry2.h:86
sophus::lie::Group< Isometry2, TScalar, lie::WithDimAndSubgroup< 2, lie::Rotation2Impl >::SemiDirectProduct >::Point
Eigen::Vector< Scalar, kPointDim > Point
Definition: lie_group.h:70
sophus::Isometry2::translation
auto translation() const -> Eigen::VectorBlock< Params const, 2 >
Definition: isometry2.h:106
sophus::lie::Group< Isometry2, TScalar, lie::WithDimAndSubgroup< 2, lie::Rotation2Impl >::SemiDirectProduct >::fromParams
static auto fromParams(Params const &params) -> Derived
Definition: lie_group.h:79
sophus::Isometry2::setUnitComplex
auto setUnitComplex(Complex< Scalar > const &z) const -> void
Definition: isometry2.h:129
sophus::lie::Group< Isometry2, TScalar, lie::WithDimAndSubgroup< 2, lie::Rotation2Impl >::SemiDirectProduct >::params_
Params params_
Definition: lie_group.h:265
sophus::Isometry2::Isometry2
Isometry2()=default
sophus::Isometry2::setRotation
auto setRotation(Rotation2< Scalar > const &rotation)
Definition: isometry2.h:116
sophus::Isometry2::unitComplex
auto unitComplex() const -> Complex< Scalar >
Definition: isometry2.h:125
sophus::Isometry2::fromUnitComplex
static auto fromUnitComplex(Complex< Scalar > const &z) -> Isometry2
Definition: isometry2.h:69
sophus::Isometry2::Isometry2
Isometry2(Eigen::Vector< Scalar, 2 > const &translation)
Definition: isometry2.h:56
sophus::Isometry2::fitFromComplex
static auto fitFromComplex(Complex< Scalar > const &z) -> Isometry2
Definition: isometry2.h:65
sophus::Isometry2::angle
auto angle() const -> Scalar
Definition: isometry2.h:133
sophus::Isometry2::translation
auto translation() -> Eigen::VectorBlock< Params, 2 >
Definition: isometry2.h:102
sophus::Isometry2
Definition: isometry2.h:22
sophus::Rotation2::fromUnitComplex
static auto fromUnitComplex(Complex< TScalar > const &z) -> Rotation2
Definition: rotation2.h:68
sophus::Isometry2::Params
typename Base::Params Params
Definition: isometry2.h:37
rotation2.h
sophus::Isometry2::rotationMatrix
auto rotationMatrix() const -> Eigen::Matrix2< Scalar >
Definition: isometry2.h:121
sophus::Isometry2::Scalar
TScalar Scalar
Definition: isometry2.h:28
lie_group.h
sophus::Isometry2::Isometry2
Isometry2(Eigen::Vector< Scalar, 2 > const &translation, Rotation2< Scalar > const &rotation)
Definition: isometry2.h:44
sophus::Isometry2::Isometry2
Isometry2(UninitTag)
Definition: isometry2.h:42
rotation2.h
group_accessors.h
sophus::Isometry2::fromRotationMatrix
static auto fromRotationMatrix(Eigen::Matrix2< Scalar > const &mat_r) -> Isometry2
Definition: isometry2.h:60
translation_factor_group_product.h
sophus::Isometry2::Tangent
typename Base::Tangent Tangent
Definition: isometry2.h:36
sophus::Rotation2
Definition: rotation2.h:20
sophus::Rotation2::fitFromComplex
static auto fitFromComplex(Complex< TScalar > const &z) -> Rotation2
Definition: rotation2.h:64
sophus::Complex
Definition: group_accessors.h:15
sophus::Isometry2::fromT
static auto fromT(TT0 const &x, TT1 const &y) -> Isometry2
Construct a translation only Isometry3 instance.
Definition: isometry2.h:80
sophus::UninitTag
Definition: common.h:70