farm-ng-core
spiral_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 
13 #include "sophus/lie/lie_group.h"
14 #include "sophus/lie/rotation3.h"
15 
16 namespace sophus {
17 
18 // origin and shape preserving mapping
19 template <class TScalar>
21  : public lie::
22  Group<SpiralSimilarity3, TScalar, lie::SpiralSimilarity3Impl> {
23  public:
24  using Scalar = TScalar;
26  using Base =
28 
29  using Tangent = typename Base::Tangent;
30  using Params = typename Base::Params;
31  using Point = typename Base::Point;
32 
33  SpiralSimilarity3() = default;
34 
35  explicit SpiralSimilarity3(UninitTag /*unused*/) {}
36 
38  : Base(Base::fromParams(rotation.params())) {
39  this->setScale(scale);
40  }
41 
42  static auto fromRotationMatrix(Eigen::Matrix3<Scalar> const& mat_r)
45  }
46 
47  static auto fromRx(Scalar x) -> SpiralSimilarity3 {
49  }
50 
51  static auto fromRy(Scalar y) -> SpiralSimilarity3 {
53  }
54 
55  static auto fromRz(Scalar z) -> SpiralSimilarity3 {
57  }
58 
60  SpiralSimilarity3 spiral_sim;
61  spiral_sim.setScale(scale);
62  return spiral_sim;
63  }
64 
66  return SpiralSimilarity3::fromParams(q.params());
67  }
68 
69  static auto fitToRotation(Eigen::Matrix3<Scalar> const& mat_r) {
70  return SpiralSimilarity3(Rotation::fitToRotation(mat_r));
71  }
72  template <class TOtherScalar>
73  auto cast() const -> SpiralSimilarity3<TOtherScalar> {
75  this->params_.template cast<TOtherScalar>());
76  }
77 
78  [[nodiscard]] auto rotation() const {
80  this->params_.template head<Rotation3<Scalar>::kNumParams>()
81  .normalized());
82  }
83 
85 
86  [[nodiscard]] auto rotationMatrix() const -> Eigen::Matrix3<Scalar> {
87  return this->rotation().matrix();
88  }
89 
90  [[nodiscard]] auto scale() const -> Scalar {
91  return this->params_.squaredNorm();
92  }
93 
95  using std::sqrt;
96  this->params_.normalize();
97  this->params_ *= sqrt(scale);
98  }
99 
100  [[nodiscard]] auto quaternion() const -> Quaternion<Scalar> {
101  return Quaternion<Scalar>::fromParams(this->params_);
102  }
103 
104  auto setQuaternion(Quaternion<Scalar> const& z) const -> void {
105  this->setParams(z);
106  }
107 };
108 
111 
112 static_assert(concepts::SpiralSimilarity3<SpiralSimilarity3F32>);
113 
114 } // namespace sophus
sophus::lie::Group::Params
Eigen::Vector< Scalar, kNumParams > Params
Definition: lie_group.h:69
Eigen
Definition: params.h:72
sophus::SpiralSimilarity3::fromRz
static auto fromRz(Scalar z) -> SpiralSimilarity3
Definition: spiral_similarity3.h:55
sophus::lie::Group::Tangent
Eigen::Vector< Scalar, kDof > Tangent
Definition: lie_group.h:68
sophus::SpiralSimilarity3::fromScale
static auto fromScale(Scalar scale) -> SpiralSimilarity3
Definition: spiral_similarity3.h:59
sophus::lie::Group
Definition: lie_group.h:24
sophus::Rotation3
Definition: rotation3.h:20
sophus::SpiralSimilarity3::cast
auto cast() const -> SpiralSimilarity3< TOtherScalar >
Definition: spiral_similarity3.h:73
sophus::SpiralSimilarity3::scale
auto scale() const -> Scalar
Definition: spiral_similarity3.h:90
sophus::SpiralSimilarity3::setRotation
void setRotation(Rotation rot)
Definition: spiral_similarity3.h:84
sophus
Image MutImage, owning images types.
Definition: num_diff.h:20
sophus::SpiralSimilarity3::rotationMatrix
auto rotationMatrix() const -> Eigen::Matrix3< Scalar >
Definition: spiral_similarity3.h:86
sophus::SpiralSimilarity3::SpiralSimilarity3
SpiralSimilarity3()=default
sophus::lie::Group::Point
Eigen::Vector< Scalar, kPointDim > Point
Definition: lie_group.h:70
sophus::Quaternion::fromParams
static auto fromParams(Params const &params) -> Quaternion
Definition: quaternion.h:118
sophus::SpiralSimilarity3::setScale
void setScale(Scalar scale)
Definition: spiral_similarity3.h:94
sophus::lie::Group< Rotation3, TScalar, lie::Rotation3Impl >::fromParams
static auto fromParams(Params const &params) -> Derived
Definition: lie_group.h:79
SOPHUS_UNIMPLEMENTED
#define SOPHUS_UNIMPLEMENTED(...)
Definition: common.h:51
sophus::SpiralSimilarity3::SpiralSimilarity3
SpiralSimilarity3(UninitTag)
Definition: spiral_similarity3.h:35
sophus::SpiralSimilarity3
Definition: spiral_similarity3.h:20
sophus::SpiralSimilarity3::setQuaternion
auto setQuaternion(Quaternion< Scalar > const &z) const -> void
Definition: spiral_similarity3.h:104
sophus::Rotation3::fromRotationMatrix
static auto fromRotationMatrix(Eigen::Matrix3< TScalar > const &mat_r) -> Rotation3
Definition: rotation3.h:65
sophus::SpiralSimilarity3::fromRy
static auto fromRy(Scalar y) -> SpiralSimilarity3
Definition: spiral_similarity3.h:51
spiral_similarity3.h
sophus::SpiralSimilarity3::SpiralSimilarity3
SpiralSimilarity3(Rotation3< Scalar > const &rotation, Scalar scale=1.0)
Definition: spiral_similarity3.h:37
sophus::Rotation3::fromRy
static auto fromRy(TScalar const &y) -> Rotation3
Construct y-axis rotation.
Definition: rotation3.h:47
sophus::Rotation3::fromRx
static auto fromRx(TScalar const &x) -> Rotation3
Construct x-axis rotation.
Definition: rotation3.h:41
lie_group.h
group_accessors.h
rotation3.h
sophus::SpiralSimilarity3::fromRx
static auto fromRx(Scalar x) -> SpiralSimilarity3
Definition: spiral_similarity3.h:47
sophus::SpiralSimilarity3::Params
typename Base::Params Params
Definition: spiral_similarity3.h:30
sophus::SpiralSimilarity3::rotation
auto rotation() const
Definition: spiral_similarity3.h:78
sophus::SpiralSimilarity3::quaternion
auto quaternion() const -> Quaternion< Scalar >
Definition: spiral_similarity3.h:100
sophus::SpiralSimilarity3::Scalar
TScalar Scalar
Definition: spiral_similarity3.h:24
sophus::SpiralSimilarity3::fitToRotation
static auto fitToRotation(Eigen::Matrix3< Scalar > const &mat_r)
Definition: spiral_similarity3.h:69
sophus::SpiralSimilarity3::fromQuaternion
static auto fromQuaternion(Quaternion< Scalar > const &q) -> SpiralSimilarity3
Definition: spiral_similarity3.h:65
sophus::UninitTag
Definition: common.h:70
sophus::SpiralSimilarity3::fromRotationMatrix
static auto fromRotationMatrix(Eigen::Matrix3< Scalar > const &mat_r) -> SpiralSimilarity3
Definition: spiral_similarity3.h:42
sophus::SpiralSimilarity3::Tangent
typename Base::Tangent Tangent
Definition: spiral_similarity3.h:29
sophus::SpiralSimilarity3::Point
typename Base::Point Point
Definition: spiral_similarity3.h:31
sophus::Quaternion
Definition: group_accessors.h:18