11#include <sleipnir/autodiff/variable.hpp>
12#include <sleipnir/autodiff/variable_matrix.hpp>
13#include <sleipnir/util/concepts.hpp>
15#include "trajopt/geometry/rotation2.hpp"
30 template <
typename X,
typename Y>
50 : m_x{other.m_x}, m_y{other.m_y} {}
55 constexpr const T&
x()
const {
return m_x; }
60 constexpr const T&
y()
const {
return m_y; }
69 using R =
decltype(std::declval<T>() + std::declval<U>());
79 return *
this + -other;
97 using R =
decltype(std::declval<T>() + std::declval<U>());
106 template <
typename U>
108 using R =
decltype(std::declval<T>() + std::declval<U>());
116 template <
typename U>
118 using R =
decltype(std::declval<T>() + std::declval<U>());
120 m_x * rotation.
sin() + m_y * rotation.
cos()};
132 template <
typename U>
134 using R =
decltype(std::declval<T>() + std::declval<U>());
135 return R{m_x * other.
x() + m_y * other.
y()};
142 template <
typename U>
144 using R =
decltype(std::declval<T>() + std::declval<U>());
145 return R{m_x * other.
y() - m_y * other.
x()};
152 constexpr auto norm()
const {
return hypot(m_x, m_y); }
166 template <
typename U>
168 return hypot(other.
x() - m_x, other.
y() - m_y);
176template <
size_t I,
typename T>
177constexpr decltype(
auto) get(
const trajopt::Translation2<T>& translation) {
178 if constexpr (I == 0) {
179 return translation.
x();
181 return translation.
y();
187template <
typename Scalar>
190template <
typename LHS,
typename RHS>
191 requires slp::SleipnirType<LHS> && (!slp::SleipnirType<RHS>)
193 using Scalar =
typename std::decay_t<LHS>::Scalar;
195 return slp::VariableMatrix<Scalar>{{lhs.x()}, {lhs.y()}} ==
196 slp::VariableMatrix<Scalar>{{rhs.x()}, {rhs.y()}};
199template <
typename LHS,
typename RHS>
200 requires(!slp::SleipnirType<LHS>) || slp::SleipnirType<RHS>
202 using Scalar =
typename std::decay_t<RHS>::Scalar;
204 return slp::VariableMatrix<Scalar>{{lhs.x()}, {lhs.y()}} ==
205 slp::VariableMatrix<Scalar>{{rhs.x()}, {rhs.y()}};
208template <
typename LHS,
typename RHS>
209 requires slp::SleipnirType<LHS> && slp::SleipnirType<RHS>
211 using Scalar =
typename std::decay_t<LHS>::Scalar;
213 return slp::VariableMatrix<Scalar>{{lhs.x()}, {lhs.y()}} ==
214 slp::VariableMatrix<Scalar>{{rhs.x()}, {rhs.y()}};
217inline bool operator==(
const Translation2d& lhs,
const Translation2d& rhs) {
218 return lhs.
x() == rhs.x() && lhs.y() == rhs.y();
227struct tuple_size<trajopt::Translation2<T>>
228 : std::integral_constant<size_t, 2> {};
233struct tuple_element<0, trajopt::Translation2<T>> {
241struct tuple_element<1, trajopt::Translation2<T>> {
Definition rotation2.hpp:20
constexpr const T & cos() const
Definition rotation2.hpp:122
constexpr const T & sin() const
Definition rotation2.hpp:127
Represents a translation in 2D space.
Definition translation2.hpp:21
constexpr Translation2< T > operator-() const
Definition translation2.hpp:88
constexpr auto distance(const Translation2< U > &other) const
Definition translation2.hpp:167
constexpr auto dot(const Translation2< U > &other) const
Definition translation2.hpp:133
constexpr auto operator/(const U &scalar) const
Definition translation2.hpp:107
constexpr Translation2(const Translation2< U > &other)
Definition translation2.hpp:49
constexpr auto norm() const
Definition translation2.hpp:152
constexpr auto operator*(const U &scalar) const
Definition translation2.hpp:96
constexpr const double & y() const
Definition translation2.hpp:60
constexpr auto rotate_by(const Rotation2< U > &rotation) const
Definition translation2.hpp:117
constexpr auto squared_norm() const
Definition translation2.hpp:158
constexpr Translation2(T distance, const Rotation2< U > &angle)
Definition translation2.hpp:42
constexpr auto cross(const Translation2< U > &other) const
Definition translation2.hpp:143
constexpr Translation2(X x, Y y)
Definition translation2.hpp:31
constexpr Rotation2< double > angle() const
Definition translation2.hpp:126
constexpr auto operator+(const Translation2< U > &other) const
Definition translation2.hpp:68
constexpr auto operator-(const Translation2< U > &other) const
Definition translation2.hpp:78
constexpr const double & x() const
Definition translation2.hpp:55
constexpr Translation2()=default
Constructs a translation with x and y components equal to zero.
T type
tuple_element typedef for first element of translation.
Definition translation2.hpp:235
T type
Tuple element typedef for first element of translation.
Definition translation2.hpp:243