Go to the documentation of this file.
16 template <
class TScalar>
23 using Params = Eigen::Vector<Scalar, kNumParams>;
25 template <
class TCompatibleScalar>
27 typename Eigen::ScalarBinaryOpTraits<Scalar, TCompatibleScalar>::
33 static auto zero() -> Eigen::Vector<Scalar, 4> {
34 return Eigen::Vector<Scalar, 4>::Zero();
37 static auto one() -> Eigen::Vector<Scalar, 4> {
38 return Eigen::Vector<Scalar, 4>(0.0, 0.0, 0.0, 1.0);
42 -> sophus::Expected<Success> {
43 return sophus::Expected<Success>{};
47 return pointExamples<Scalar, 4>();
51 return std::vector<Params>({});
54 template <
class TCompatibleScalar>
56 Eigen::Vector<Scalar, 4>
const& lhs,
57 Eigen::Vector<TCompatibleScalar, 4>
const& rhs)
59 Eigen::Vector3<Scalar> lhs_ivec = lhs.template head<3>();
60 Eigen::Vector3<TCompatibleScalar> rhs_ivec = rhs.template head<3>();
63 out.w() = lhs.w() * rhs.w() - lhs_ivec.dot(rhs_ivec);
64 out.template head<3>() =
65 lhs.w() * rhs_ivec + rhs.w() * lhs_ivec + lhs_ivec.cross(rhs_ivec);
69 template <
class TCompatibleScalar>
71 Eigen::Vector<Scalar, 4>
const& a,
72 Eigen::Vector<TCompatibleScalar, 4>
const& b)
77 static auto conjugate(Eigen::Vector<Scalar, 4>
const& a)
78 -> Eigen::Vector<Scalar, 4> {
79 return Eigen::Vector<Scalar, 4>(-a.x(), -a.y(), -a.z(), a.w());
82 static auto inverse(Eigen::Vector<Scalar, 4>
const& q)
83 -> Eigen::Vector<Scalar, 4> {
87 static auto norm(Eigen::Vector<Scalar, 4>
const& q) ->
Scalar {
92 return q.squaredNorm();
96 template <
class TScalar>
100 using Imag = Eigen::Vector<Scalar, 3>;
104 using Params = Eigen::Vector<Scalar, kNumParams>;
106 template <
class TCompatibleScalar>
109 TCompatibleScalar>::ReturnType>;
136 [[nodiscard]]
auto real() const ->
Scalar const& {
return params_[3]; }
139 [[nodiscard]]
auto imag()
const {
return params_.template head<3>(); }
140 [[nodiscard]]
auto imag() {
return params_.template head<3>(); }
142 template <
class TCompatibleScalar>
149 template <
class TCompatibleScalar>
174 Eigen::Vector4<Scalar> params_;
static auto paramsExamples() -> std::vector< Params >
Definition: quaternion.h:46
Eigen::Vector< Scalar, kNumParams > Params
Definition: quaternion.h:23
Image MutImage, owning images types.
Definition: num_diff.h:20
static auto zero() -> Quaternion
Definition: quaternion.h:124
static constexpr bool kIsCommutative
Definition: quaternion.h:21
auto real() -> Scalar &
Definition: quaternion.h:137
static constexpr int kNumParams
Definition: quaternion.h:102
auto imag()
Definition: quaternion.h:140
static auto fromParams(Params const ¶ms) -> Quaternion
Definition: quaternion.h:118
static auto conjugate(Eigen::Vector< Scalar, 4 > const &a) -> Eigen::Vector< Scalar, 4 >
Definition: quaternion.h:77
auto params() const -> Params const &
Definition: quaternion.h:132
static auto invalidParamsExamples() -> std::vector< Params >
Definition: quaternion.h:50
static auto zero() -> Eigen::Vector< Scalar, 4 >
Definition: quaternion.h:33
static auto addition(Eigen::Vector< Scalar, 4 > const &a, Eigen::Vector< TCompatibleScalar, 4 > const &b) -> ParamsReturn< TCompatibleScalar >
Definition: quaternion.h:70
Quaternion()
Definition: quaternion.h:113
static auto norm(Eigen::Vector< Scalar, 4 > const &q) -> Scalar
Definition: quaternion.h:87
void setParams(Params const ¶ms)
Definition: quaternion.h:134
TScalar Scalar
Definition: quaternion.h:19
auto real() const -> Scalar const &
Definition: quaternion.h:136
auto imag() const
Definition: quaternion.h:139
auto norm() const -> Scalar
Definition: quaternion.h:164
auto squaredNorm() const -> Scalar
Definition: quaternion.h:168
Eigen::Vector< Scalar, 3 > Imag
Definition: quaternion.h:100
auto operator*(Quaternion< TCompatibleScalar > const &other) const -> QuaternionReturn< TCompatibleScalar >
Definition: quaternion.h:143
auto inverse() const -> Quaternion
Definition: quaternion.h:160
Eigen::Vector< typename Eigen::ScalarBinaryOpTraits< Scalar, TCompatibleScalar >::ReturnType, 4 > ParamsReturn
Definition: quaternion.h:29
static auto inverse(Eigen::Vector< Scalar, 4 > const &q) -> Eigen::Vector< Scalar, 4 >
Definition: quaternion.h:82
auto conjugate() const -> Quaternion
Definition: quaternion.h:156
auto operator+(Quaternion< TCompatibleScalar > const &other) const -> QuaternionReturn< TCompatibleScalar >
Definition: quaternion.h:150
auto operator=(Quaternion const &) -> Quaternion &=default
static auto areParamsValid(Params const &) -> sophus::Expected< Success >
Definition: quaternion.h:41
Eigen::Vector< Scalar, kNumParams > Params
Definition: quaternion.h:104
Definition: quaternion.h:17
static auto one() -> Eigen::Vector< Scalar, 4 >
Definition: quaternion.h:37
static auto squaredNorm(Eigen::Vector< Scalar, 4 > const &q) -> Scalar
Definition: quaternion.h:91
static auto multiplication(Eigen::Vector< Scalar, 4 > const &lhs, Eigen::Vector< TCompatibleScalar, 4 > const &rhs) -> ParamsReturn< TCompatibleScalar >
Definition: quaternion.h:55
TScalar Scalar
Definition: quaternion.h:99
static auto one() -> Quaternion
Definition: quaternion.h:128
Definition: group_accessors.h:18
static constexpr int kNumParams
Definition: quaternion.h:20