farm-ng-core
similarity3.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/isometry3.h"
15 #include "sophus/lie/lie_group.h"
17 
18 namespace sophus {
19 
20 // origin, coordinate axis directions, and shape preserving mapping
21 template <class TScalar>
22 class Similarity3 : public lie::Group<
23  Similarity3,
24  TScalar,
25  lie::WithDimAndSubgroup<3, lie::SpiralSimilarity3Impl>::
26  SemiDirectProduct> {
27  public:
28  using Scalar = TScalar;
29  using Base = lie::Group<
31  TScalar,
33  SemiDirectProduct>;
37 
38  using Tangent = typename Base::Tangent;
39  using Params = typename Base::Params;
40  using Point = typename Base::Point;
41 
42  Similarity3() = default;
43 
44  explicit Similarity3(UninitTag /*unused*/) {}
45 
47  Eigen::Vector<Scalar, 3> const& translation,
48  SpiralSimilarity const& scaled_rotation)
49  : Similarity3(UninitTag{}) {
50  this->params_.template head<4>() = scaled_rotation.params();
51  this->params_.template tail<3>() = translation;
52  }
53 
55  : Similarity3(Eigen::Vector<Scalar, 3>::Zero(), rotation) {}
56 
57  Similarity3(SpiralSimilarity const& scaled_rotation)
58  : Similarity3(Eigen::Vector<Scalar, 3>::Zero(), scaled_rotation) {}
59 
60  Similarity3(Isometry const& isometry)
61  : Similarity3(isometry.translation(), isometry.rotation()) {}
62 
64  Eigen::Vector<Scalar, 3> const& translation, Rotation const& rotation)
66 
68  Eigen::Vector<Scalar, 3> const& translation,
69  Rotation const& rotation,
70  Scalar scale)
72 
74  : Similarity3(Eigen::Vector<Scalar, 3>::Zero(), rotation, scale) {}
75 
76  Similarity3(Eigen::Vector<Scalar, 3> const& translation)
78 
79  static auto fromRotationMatrix(Eigen::Matrix3<Scalar> const& mat_r)
80  -> Similarity3 {
82  }
83 
84  static auto fromQuaternion(Quaternion<Scalar> const& q) -> Similarity3 {
86  }
87 
88  static auto fromScale(Scalar const& scale) -> Similarity3 {
89  return Similarity3(Rotation{}, scale);
90  }
91 
92  /// Construct a translation only Isometry3 instance.
93  ///
94  template <class TT0, class TT1, class TT2>
95  static auto fromT(TT0 const& x, TT1 const& y, TT2 const& z) -> Similarity3 {
96  return Similarity3(Eigen::Vector3<Scalar>(x, y, z));
97  }
98 
99  /// Construct x-axis translation.
100  ///
101  static auto fromTx(Scalar const& x) -> Similarity3 {
102  return Similarity3::fromT(x, Scalar(0), Scalar(0));
103  }
104 
105  /// Construct y-axis translation.
106  ///
107  static auto fromTy(Scalar const& y) -> Similarity3 {
108  return Similarity3::fromT(Scalar(0), y, Scalar(0));
109  }
110 
111  /// Construct z-axis translation.
112  ///
113  static auto fromTz(Scalar const& z) -> Similarity3 {
114  return Similarity3::fromT(Scalar(0), Scalar(0), z);
115  }
116 
117  /// Construct x-axis rotation.
118  ///
119  static auto fromRx(Scalar const& x) -> Similarity3 {
121  }
122 
123  /// Construct y-axis rotation.
124  ///
125  static auto fromRy(Scalar const& y) -> Similarity3 {
127  }
128 
129  /// Construct z-axis rotation.
130  ///
131  static auto fromRz(Scalar const& z) -> Similarity3 {
133  }
134 
135  template <class TOtherScalar>
136  auto cast() const -> Similarity3<TOtherScalar> {
138  this->params_.template cast<TOtherScalar>());
139  }
140 
141  auto translation() -> Eigen::VectorBlock<Params, 3> {
142  return this->params_.template tail<3>();
143  }
144 
145  [[nodiscard]] auto translation() const
146  -> Eigen::VectorBlock<Params const, 3> {
147  return this->params_.template tail<3>();
148  }
149 
150  [[nodiscard]] auto rotation() const {
151  return this->spiralSimilarity().rotation();
152  }
153 
154  void setRotation(Rotation const& rotation) { this->rotation() = rotation; }
155 
156  [[nodiscard]] auto rotationMatrix() const -> Eigen::Matrix3<Scalar> {
157  return this->rotation().matrix();
158  }
159 
160  [[nodiscard]] auto spiralSimilarity() const {
162  this->params_.template head<SpiralSimilarity3<Scalar>::kNumParams>());
163  }
164 
166  this->params_.template head<SpiralSimilarity3<Scalar>::kNumParams>() =
167  rotation.params();
168  }
169  [[nodiscard]] auto scale() const -> Scalar {
170  return this->spiralSimilarity().scale();
171  }
172 
175  s.setScale(scale);
176  this->setSpiralSimilarity(s);
177  }
178 
179  auto setQuaternion(Quaternion<Scalar> const& z) const -> void {
181  }
182 
183  [[nodiscard]] auto quaternion() const -> Quaternion<Scalar> {
184  return this->spiralSimilarity().quaternion();
185  }
186 };
187 
190 
191 static_assert(concepts::Similarity3<Similarity3F64>);
192 
193 } // namespace sophus
sophus::Similarity3::setQuaternion
auto setQuaternion(Quaternion< Scalar > const &z) const -> void
Definition: similarity3.h:179
sophus::lie::Group< Similarity3, TScalar, lie::WithDimAndSubgroup< 3, lie::SpiralSimilarity3Impl >::SemiDirectProduct >::Params
Eigen::Vector< Scalar, kNumParams > Params
Definition: lie_group.h:69
Eigen
Definition: params.h:72
sophus::Similarity3::Similarity3
Similarity3(Rotation const &rotation)
Definition: similarity3.h:54
sophus::lie::Group< Similarity3, TScalar, lie::WithDimAndSubgroup< 3, lie::SpiralSimilarity3Impl >::SemiDirectProduct >::Tangent
Eigen::Vector< Scalar, kDof > Tangent
Definition: lie_group.h:68
sophus::Similarity3::spiralSimilarity
auto spiralSimilarity() const
Definition: similarity3.h:160
sophus::lie::Group
Definition: lie_group.h:24
sophus::Rotation3
Definition: rotation3.h:20
sophus::Similarity3::fromRy
static auto fromRy(Scalar const &y) -> Similarity3
Construct y-axis rotation.
Definition: similarity3.h:125
sophus::Similarity3::fromRotationMatrix
static auto fromRotationMatrix(Eigen::Matrix3< Scalar > const &mat_r) -> Similarity3
Definition: similarity3.h:79
sophus::Similarity3::fromTx
static auto fromTx(Scalar const &x) -> Similarity3
Construct x-axis translation.
Definition: similarity3.h:101
sophus
Image MutImage, owning images types.
Definition: num_diff.h:20
sophus::Similarity3::quaternion
auto quaternion() const -> Quaternion< Scalar >
Definition: similarity3.h:183
sophus::Similarity3::Tangent
typename Base::Tangent Tangent
Definition: similarity3.h:38
sophus::Similarity3::Similarity3
Similarity3(SpiralSimilarity const &scaled_rotation)
Definition: similarity3.h:57
sophus::Similarity3::Scalar
TScalar Scalar
Definition: similarity3.h:28
sophus::lie::Group< Similarity3, TScalar, lie::WithDimAndSubgroup< 3, lie::SpiralSimilarity3Impl >::SemiDirectProduct >::Point
Eigen::Vector< Scalar, kPointDim > Point
Definition: lie_group.h:70
sophus::SpiralSimilarity3::setScale
void setScale(Scalar scale)
Definition: spiral_similarity3.h:94
sophus::lie::Group< Similarity3, TScalar, lie::WithDimAndSubgroup< 3, lie::SpiralSimilarity3Impl >::SemiDirectProduct >::fromParams
static auto fromParams(Params const &params) -> Derived
Definition: lie_group.h:79
sophus::Similarity3::fromT
static auto fromT(TT0 const &x, TT1 const &y, TT2 const &z) -> Similarity3
Construct a translation only Isometry3 instance.
Definition: similarity3.h:95
sophus::lie::Group< Similarity3, TScalar, lie::WithDimAndSubgroup< 3, lie::SpiralSimilarity3Impl >::SemiDirectProduct >::params_
Params params_
Definition: lie_group.h:265
sophus::Similarity3::cast
auto cast() const -> Similarity3< TOtherScalar >
Definition: similarity3.h:136
sophus::SpiralSimilarity3
Definition: spiral_similarity3.h:20
isometry3.h
sophus::Similarity3::Params
typename Base::Params Params
Definition: similarity3.h:39
sophus::Rotation3::fromRotationMatrix
static auto fromRotationMatrix(Eigen::Matrix3< TScalar > const &mat_r) -> Rotation3
Definition: rotation3.h:65
sophus::Similarity3::Similarity3
Similarity3(UninitTag)
Definition: similarity3.h:44
sophus::lie::WithDimAndSubgroup
Definition: translation_factor_group_product.h:380
sophus::Similarity3::setRotation
void setRotation(Rotation const &rotation)
Definition: similarity3.h:154
sophus::Similarity3::Similarity3
Similarity3(Eigen::Vector< Scalar, 3 > const &translation, Rotation const &rotation)
Definition: similarity3.h:63
sophus::Similarity3::rotation
auto rotation() const
Definition: similarity3.h:150
spiral_similarity3.h
sophus::Similarity3::setSpiralSimilarity
auto setSpiralSimilarity(SpiralSimilarity3< Scalar > const &rotation)
Definition: similarity3.h:165
lie_group.h
sophus::Similarity3::Similarity3
Similarity3(Eigen::Vector< Scalar, 3 > const &translation, SpiralSimilarity const &scaled_rotation)
Definition: similarity3.h:46
sophus::Similarity3::scale
auto scale() const -> Scalar
Definition: similarity3.h:169
sophus::Similarity3::fromRz
static auto fromRz(Scalar const &z) -> Similarity3
Construct z-axis rotation.
Definition: similarity3.h:131
sophus::Similarity3::Point
typename Base::Point Point
Definition: similarity3.h:40
sophus::Similarity3::fromTy
static auto fromTy(Scalar const &y) -> Similarity3
Construct y-axis translation.
Definition: similarity3.h:107
group_accessors.h
sophus::Similarity3::Similarity3
Similarity3()=default
translation_factor_group_product.h
sophus::Similarity3::Similarity3
Similarity3(Isometry const &isometry)
Definition: similarity3.h:60
sophus::Similarity3::Similarity3
Similarity3(Eigen::Vector< Scalar, 3 > const &translation, Rotation const &rotation, Scalar scale)
Definition: similarity3.h:67
sophus::Similarity3::fromQuaternion
static auto fromQuaternion(Quaternion< Scalar > const &q) -> Similarity3
Definition: similarity3.h:84
sophus::Similarity3::Similarity3
Similarity3(Rotation const &rotation, Scalar scale)
Definition: similarity3.h:73
sophus::Isometry3< Scalar >
sophus::Similarity3
Definition: similarity3.h:22
sophus::Similarity3::Similarity3
Similarity3(Eigen::Vector< Scalar, 3 > const &translation)
Definition: similarity3.h:76
sophus::Similarity3::setScale
void setScale(Scalar scale)
Definition: similarity3.h:173
sophus::Similarity3::translation
auto translation() const -> Eigen::VectorBlock< Params const, 3 >
Definition: similarity3.h:145
sophus::Similarity3::fromRx
static auto fromRx(Scalar const &x) -> Similarity3
Construct x-axis rotation.
Definition: similarity3.h:119
spiral_similarity3.h
sophus::Similarity3::fromScale
static auto fromScale(Scalar const &scale) -> Similarity3
Definition: similarity3.h:88
sophus::Similarity3::translation
auto translation() -> Eigen::VectorBlock< Params, 3 >
Definition: similarity3.h:141
sophus::SpiralSimilarity3::fromQuaternion
static auto fromQuaternion(Quaternion< Scalar > const &q) -> SpiralSimilarity3
Definition: spiral_similarity3.h:65
sophus::UninitTag
Definition: common.h:70
sophus::Similarity3::fromTz
static auto fromTz(Scalar const &z) -> Similarity3
Construct z-axis translation.
Definition: similarity3.h:113
sophus::Quaternion
Definition: group_accessors.h:18
sophus::Similarity3::rotationMatrix
auto rotationMatrix() const -> Eigen::Matrix3< Scalar >
Definition: similarity3.h:156