5#include "MRPch/MRBindingMacros.h"
14#pragma warning(disable: 4804)
15#pragma warning(disable: 4146)
47 constexpr const T &
operator [](
int e )
const noexcept {
return *( &
x + e ); }
48 constexpr T &
operator [](
int e )
noexcept {
return *( &
x + e ); }
64 return ( 1 / len ) * (*this);
75 return std::isfinite(
x ) && std::isfinite(
y );
92 if constexpr ( std::is_integral_v<T> )
93 return { b.x / a, b.y / a };
103 if constexpr ( std::is_integral_v<T> )
104 { a.
x /= b; a.y /= b;
return a; }
106 return a *= ( 1 / b );
117 return ( a - b ).lengthSq();
124 return ( a - b ).length();
131 return a.
x * b.
y - a.
y * b.
x;
138 return a.x * b.x + a.y * b.y;
152 return { a.
x * b.
x,a.
y * b.
y };
159 return { a.
x / b.
x, a.
y / b.
y };
166 return std::atan2( std::abs( cross( a, b ) ), dot( a, b ) );
175 if ( abs( x ) < abs( y ) )
185MR_BIND_IGNORE
inline auto begin(
const Vector2<T> & v ) {
return &v[0]; }
187MR_BIND_IGNORE
inline auto begin( Vector2<T> & v ) {
return &v[0]; }
190MR_BIND_IGNORE
inline auto end(
const Vector2<T> & v ) {
return &v[2]; }
192MR_BIND_IGNORE
inline auto end( Vector2<T> & v ) {
return &v[2]; }
#define MR_REQUIRES_IF_SUPPORTED(...)
Definition MRMacros.h:31
MR_BIND_IGNORE auto begin(const BitSet &a)
Definition MRMesh/MRBitSet.h:295
MR_BIND_IGNORE auto end(const BitSet &)
Definition MRMesh/MRBitSet.h:297
Definition MRMatrix2.h:19
Definition MRMesh/MRMeshFwd.h:89
Definition MRSymMatrix2.h:14
Definition MRVector2.h:25
T x
Definition MRVector2.h:31
Vector2(NoInit) noexcept
Definition MRVector2.h:34
Vector2< T > div(const Vector2< T > &a, const Vector2< T > &b)
per component division
Definition MRVector2.h:157
T cross(const Vector2< T > &a, const Vector2< T > &b)
cross product
Definition MRVector2.h:129
friend constexpr bool operator!=(const Vector2< T > &a, const Vector2< T > &b)
Definition MRVector2.h:79
Vector2 furthestBasisVector() const
returns one of 2 basis unit vector that makes the biggest angle with the direction specified by this
static constexpr Vector2 plusY() noexcept
Definition MRVector2.h:40
constexpr Vector2(const Vector2< U > &v) noexcept
Definition MRVector2.h:45
static constexpr Vector2 minusX() noexcept
Definition MRVector2.h:41
friend constexpr Vector2< T > & operator-=(Vector2< T > &a, const Vector2< T > &b)
Definition MRVector2.h:99
friend constexpr Vector2< T > & operator+=(Vector2< T > &a, const Vector2< T > &b)
Definition MRVector2.h:98
friend constexpr auto operator*(T a, const Vector2< T > &b) -> Vector2< decltype(std::declval< T >() *std::declval< T >())>
Definition MRVector2.h:88
T ValueType
Definition MRVector2.h:26
friend constexpr Vector2< T > & operator/=(Vector2< T > &a, T b)
Definition MRVector2.h:101
T y
Definition MRVector2.h:31
constexpr Vector2(const Vector3< T > &v) noexcept
Definition MRVector2.h:36
constexpr const T & operator[](int e) const noexcept
Definition MRVector2.h:47
friend constexpr bool operator==(const Vector2< T > &a, const Vector2< T > &b)
Definition MRVector2.h:78
constexpr Vector2() noexcept
Definition MRVector2.h:33
friend constexpr auto operator/(Vector2< T > b, T a) -> Vector2< decltype(std::declval< T >()/std::declval< T >())>
Definition MRVector2.h:90
bool isFinite() const
Definition MRVector2.h:73
static constexpr Vector2 diagonal(T a) noexcept
Definition MRVector2.h:38
T distanceSq(const Vector2< T > &a, const Vector2< T > &b)
squared distance between two points, which is faster to compute than just distance
Definition MRVector2.h:115
constexpr Vector2 perpendicular() const
returns same length vector orthogonal to this (rotated 90 degrees counter-clockwise)
Definition MRVector2.h:71
T distance(const Vector2< T > &a, const Vector2< T > &b)
distance between two points, better use distanceSq for higher performance
Definition MRVector2.h:122
constexpr Vector2(T x, T y) noexcept
Definition MRVector2.h:35
T sqr(const Vector2< T > &a)
squared length
Definition MRVector2.h:143
static constexpr int elements
Definition MRVector2.h:29
auto length() const
Definition MRVector2.h:51
static constexpr Vector2 plusX() noexcept
Definition MRVector2.h:39
auto dot(const Vector2< T > &a, const Vector2< T > &b) -> decltype(a.x *b.x)
dot product
Definition MRVector2.h:136
Vector2< T > mult(const Vector2< T > &a, const Vector2< T > &b)
per component multiplication
Definition MRVector2.h:150
friend constexpr Vector2< T > & operator*=(Vector2< T > &a, T b)
Definition MRVector2.h:100
Vector2 normalized() const
Definition MRVector2.h:59
friend constexpr auto operator-(const Vector2< T > &a) -> Vector2< decltype(-std::declval< T >())>
Definition MRVector2.h:84
T lengthSq() const
Definition MRVector2.h:50
static constexpr Vector2 minusY() noexcept
Definition MRVector2.h:42
friend constexpr const Vector2< T > & operator+(const Vector2< T > &a)
Definition MRVector2.h:83
T angle(const Vector2< T > &a, const Vector2< T > &b)
angle in radians between two vectors
Definition MRVector2.h:164
Definition MRMesh/MRVector3.h:26