7#include "core/math/eigen_interface.h"
8#include "core/math/geometry/rotation2d.h"
9#include "core/math/units.h"
16 std::ratio_equal_v<typename Q::angle, std::ratio<0>>;
28template <LinearKinematicQuantity Q>
61 : x_{vector[0], unit}, y_{vector[1], unit} {}
64 constexpr Q
x()
const {
return x_; }
67 constexpr double x(Q unit)
const {
return x_.to(unit); }
70 constexpr void set_x(Q val) { x_ = val; }
73 constexpr Q
y()
const {
return y_; }
76 constexpr double y(Q unit)
const {
return y_.to(unit); }
79 constexpr void set_y(Q val) { y_ = val; }
90 constexpr Eigen::Vector2d
as_vector(Q unit)
const {
return EVec<2>{x_.to(unit), y_.to(unit)}; }
93 constexpr Q
norm()
const {
return units::hypot(x_, y_); }
108 return units::hypot(x_ - other.x_, y_ - other.y_);
126 return *
this + (end - *
this) * fraction;
179 return (x_ * other.x_) + (y_ * other.y_);
184 return {x_ + other.x_, y_ + other.y_};
192 return {x_ - other.x_, y_ - other.y_};
206 return vector * scalar;
213 template <units::IsQuantity S>
223 template <units::IsQuantity S>
226 return vector * scalar;
246 template <units::IsQuantity S>
257 return cevalm::abs(x_.internal() - other.x_.internal()) < 1e-6 &&
258 cevalm::abs(y_.internal() - other.y_.internal()) < 1e-6;
266 return distance(other) <= tolerance;
276 if (list.size() == 0) {
Definition translation2d.h:29
constexpr bool operator==(LinearVector2d other) const
Checks exact equality between this and another vector.
Definition translation2d.h:256
constexpr LinearVector2d & operator-=(LinearVector2d other)
Subtracts another vector from this vector component wise.
Definition translation2d.h:196
constexpr Rotation2d theta() const
Definition translation2d.h:82
constexpr LinearVector2d operator-() const
Inverts this vector (flipped across origin).
Definition translation2d.h:199
constexpr LinearVector2d & operator*=(double scalar)
Multiplies this vector by a scalar.
Definition translation2d.h:241
constexpr double x(Q unit) const
Gets x in the supplied unit.
Definition translation2d.h:67
constexpr LinearVector2d operator-(LinearVector2d other) const
Subtracts another vector from this vector component wise.
Definition translation2d.h:191
constexpr LinearVector2d interpolate(LinearVector2d end, double fraction) const
Definition translation2d.h:119
constexpr units::Multiplied< Q, Q > dot(LinearVector2d other) const
Definition translation2d.h:178
constexpr LinearVector2d normalize(Q magnitude=Q(1.0)) const
Definition translation2d.h:102
constexpr LinearVector2d & operator/=(double scalar)
Divides this vector by a scalar.
Definition translation2d.h:253
constexpr Q x() const
Definition translation2d.h:64
constexpr LinearVector2d operator+(LinearVector2d other) const
Adds another vector to this vector component wise.
Definition translation2d.h:183
friend constexpr auto operator*(S scalar, LinearVector2d vector)
Definition translation2d.h:225
friend constexpr LinearVector2d operator*(double scalar, LinearVector2d vector)
Multiplies a scalar by this vector.
Definition translation2d.h:205
constexpr Q distance(LinearVector2d other) const
Gets the distance between two vectors.
Definition translation2d.h:107
constexpr double y(Q unit) const
Gets y in the supplied unit.
Definition translation2d.h:76
constexpr void set_x(Q val)
Sets the x component.
Definition translation2d.h:70
constexpr units::Multiplied< Q, Q > operator*(LinearVector2d other) const
Definition translation2d.h:238
constexpr LinearVector2d operator*(double scalar) const
Multiplies this vector by a scalar.
Definition translation2d.h:202
static constexpr LinearVector2d mean(const std::vector< LinearVector2d > &list)
Definition translation2d.h:275
constexpr void set_y(Q val)
Sets the y component.
Definition translation2d.h:79
constexpr LinearVector2d rotate_around(LinearVector2d other, Rotation2d rotation) const
Definition translation2d.h:155
constexpr LinearVector2d()
Default Constructor for LinearVector2d valued (0, 0).
Definition translation2d.h:36
constexpr LinearVector2d(Q x, Q y)
Definition translation2d.h:44
constexpr LinearVector2d(Q r, Rotation2d theta)
Definition translation2d.h:52
constexpr LinearVector2d(Eigen::Vector2d vector, Q unit)
Definition translation2d.h:60
constexpr LinearVector2d< units::Multiplied< Q, S > > operator*(S scalar) const
Definition translation2d.h:215
constexpr LinearVector2d & operator+=(LinearVector2d other)
Adds another vector to this vector component wise.
Definition translation2d.h:188
constexpr bool is_near(LinearVector2d other, Q tolerance=Q(1e-6)) const
Definition translation2d.h:265
constexpr LinearVector2d rotate_by(Rotation2d rotation) const
Definition translation2d.h:139
constexpr LinearVector2d inverse() const
Definition translation2d.h:167
constexpr Eigen::Vector2d as_vector(Q unit) const
Definition translation2d.h:90
constexpr Q norm() const
Gets the norm of the vector.
Definition translation2d.h:93
constexpr Q y() const
Definition translation2d.h:73
constexpr LinearVector2d operator/(double scalar) const
Divides this vector by a scalar.
Definition translation2d.h:244
Definition rotation2d.h:16
constexpr double f_sin() const
Gets the sine of the rotation.
Definition rotation2d.h:87
constexpr Rotation2d()=default
Default Constructor for Rotation2d.
constexpr double f_cos() const
Gets the cosine of the rotation.
Definition rotation2d.h:84
Definition translation2d.h:14
Only allows nonzero length, time, angle for the next two functions.
Definition units.h:961
Quantity< std::ratio_add< typename Q1::mass, typename Q2::mass >, std::ratio_add< typename Q1::length, typename Q2::length >, std::ratio_add< typename Q1::time, typename Q2::time >, std::ratio_add< typename Q1::current, typename Q2::current >, std::ratio_add< typename Q1::angle, typename Q2::angle >, std::ratio_add< typename Q1::temperature, typename Q2::temperature >, std::ratio_add< typename Q1::luminosity, typename Q2::luminosity >, std::ratio_add< typename Q1::moles, typename Q2::moles > > Multiplied
Multiplying quantities adds their dimensions.
Definition units.h:194