farm-ng-core
spiral_similarity2.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 
13 #include "sophus/lie/lie_group.h"
14 #include "sophus/lie/rotation2.h"
15 
16 namespace sophus {
17 
18 // origin and shape preserving mapping
19 template <class TScalar>
21  : public lie::
22  Group<SpiralSimilarity2, TScalar, lie::SpiralSimilarity2Impl> {
23  public:
24  using Scalar = TScalar;
25  using Base =
28 
29  using Tangent = typename Base::Tangent;
30  using Params = typename Base::Params;
31  using Point = typename Base::Point;
32 
33  SpiralSimilarity2() = default;
34 
35  explicit SpiralSimilarity2(UninitTag /*unused*/) {}
36 
38  : Base(Base::fromParams(rotation.params())) {
39  this->setScale(scale);
40  }
41 
42  static auto fromComplex(Complex<Scalar> const& z) -> SpiralSimilarity2 {
43  return SpiralSimilarity2::fromParams(z.params());
44  }
45 
46  static auto fromRotationMatrix(Eigen::Matrix2<Scalar> const& mat_r)
49  }
50 
51  static auto fromAngle(Scalar theta) -> SpiralSimilarity2 {
53  }
54 
56  SpiralSimilarity2 spiral_sim;
57  spiral_sim.setScale(scale);
58  return spiral_sim;
59  }
60 
61  template <class TOtherScalar>
62  auto cast() const -> SpiralSimilarity2<TOtherScalar> {
64  this->params_.template cast<TOtherScalar>());
65  }
66 
67  [[nodiscard]] auto rotation() const {
69  this->params_.template head<Rotation2<Scalar>::kNumParams>()
70  .normalized());
71  }
72 
73  [[nodiscard]] auto rotationMatrix() const -> Eigen::Matrix2<Scalar> {
74  return this->rotation().matrix();
75  }
76 
78 
79  [[nodiscard]] auto scale() const -> Scalar { return this->params_.norm(); }
80 
82  using std::sqrt;
83  this->params_.normalize();
84  this->params_ *= scale;
85  }
86 
87  [[nodiscard]] auto angle() const -> Scalar {
88  return this->rotation().angle();
89  }
90 
91  [[nodiscard]] auto complex() const -> Complex<Scalar> {
92  return Complex<Scalar>::fromParams(this->params_);
93  }
94 
95  auto setComplex(Complex<Scalar> const& z) const -> void {
96  this->setParams(z);
97  }
98 };
99 
102 
103 static_assert(concepts::SpiralSimilarity2<SpiralSimilarity2F32>);
104 
105 } // namespace sophus
sophus::lie::Group::Params
Eigen::Vector< Scalar, kNumParams > Params
Definition: lie_group.h:69
Eigen
Definition: params.h:72
sophus::Rotation2::fromAngle
static auto fromAngle(TScalar const &theta) -> Rotation2
Definition: rotation2.h:60
sophus::lie::Group::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::lie::Group
Definition: lie_group.h:24
sophus::SpiralSimilarity2::fromComplex
static auto fromComplex(Complex< Scalar > const &z) -> SpiralSimilarity2
Definition: spiral_similarity2.h:42
sophus::SpiralSimilarity2::rotationMatrix
auto rotationMatrix() const -> Eigen::Matrix2< Scalar >
Definition: spiral_similarity2.h:73
sophus
Image MutImage, owning images types.
Definition: num_diff.h:20
sophus::lie::Group::Point
Eigen::Vector< Scalar, kPointDim > Point
Definition: lie_group.h:70
spiral_similarity2.h
sophus::lie::Group< Rotation2, TScalar, lie::Rotation2Impl >::fromParams
static auto fromParams(Params const &params) -> Derived
Definition: lie_group.h:79
sophus::SpiralSimilarity2::scale
auto scale() const -> Scalar
Definition: spiral_similarity2.h:79
sophus::SpiralSimilarity2::fromRotationMatrix
static auto fromRotationMatrix(Eigen::Matrix2< Scalar > const &mat_r) -> SpiralSimilarity2
Definition: spiral_similarity2.h:46
SOPHUS_UNIMPLEMENTED
#define SOPHUS_UNIMPLEMENTED(...)
Definition: common.h:51
sophus::SpiralSimilarity2::SpiralSimilarity2
SpiralSimilarity2(UninitTag)
Definition: spiral_similarity2.h:35
sophus::SpiralSimilarity2::complex
auto complex() const -> Complex< Scalar >
Definition: spiral_similarity2.h:91
sophus::SpiralSimilarity2::fromScale
static auto fromScale(Scalar scale) -> SpiralSimilarity2
Definition: spiral_similarity2.h:55
sophus::SpiralSimilarity2::setRotation
void setRotation(Rotation rot)
Definition: spiral_similarity2.h:77
sophus::Complex::fromParams
static auto fromParams(Params const &params) -> Complex
Definition: complex.h:122
sophus::SpiralSimilarity2::Point
typename Base::Point Point
Definition: spiral_similarity2.h:31
sophus::SpiralSimilarity2::setComplex
auto setComplex(Complex< Scalar > const &z) const -> void
Definition: spiral_similarity2.h:95
sophus::SpiralSimilarity2
Definition: spiral_similarity2.h:20
sophus::SpiralSimilarity2::SpiralSimilarity2
SpiralSimilarity2()=default
rotation2.h
sophus::SpiralSimilarity2::setScale
void setScale(Scalar scale)
Definition: spiral_similarity2.h:81
sophus::SpiralSimilarity2::Scalar
TScalar Scalar
Definition: spiral_similarity2.h:24
lie_group.h
group_accessors.h
sophus::SpiralSimilarity2::Tangent
typename Base::Tangent Tangent
Definition: spiral_similarity2.h:29
sophus::SpiralSimilarity2::SpiralSimilarity2
SpiralSimilarity2(Rotation2< Scalar > const &rotation, Scalar scale=1.0)
Definition: spiral_similarity2.h:37
sophus::Rotation2
Definition: rotation2.h:20
sophus::SpiralSimilarity2::cast
auto cast() const -> SpiralSimilarity2< TOtherScalar >
Definition: spiral_similarity2.h:62
sophus::SpiralSimilarity2::rotation
auto rotation() const
Definition: spiral_similarity2.h:67
sophus::SpiralSimilarity2::angle
auto angle() const -> Scalar
Definition: spiral_similarity2.h:87
sophus::Complex
Definition: group_accessors.h:15
sophus::SpiralSimilarity2::fromAngle
static auto fromAngle(Scalar theta) -> SpiralSimilarity2
Definition: spiral_similarity2.h:51
sophus::SpiralSimilarity2::Params
typename Base::Params Params
Definition: spiral_similarity2.h:30
sophus::UninitTag
Definition: common.h:70