6#include "MRPch/MRBindingMacros.h"
17#pragma warning(disable: 4804)
18#pragma warning(disable: 4146)
39 static_assert(
elements == 2,
"Invalid number of elements" );
56 constexpr explicit Vector2(
const Vector2<U> & v ) noexcept :
x( T( v.x ) ),
y( T( v.y ) ) { }
75 return ( 1 / len ) * (*this);
86 return std::isfinite(
x ) && std::isfinite(
y );
103 if constexpr ( std::is_integral_v<T> )
104 return { b.x / a, b.y / a };
106 return b * ( 1 / a );
114 if constexpr ( std::is_integral_v<T> )
115 { a.
x /= b; a.
y /= b;
return a; }
117 return a *= ( 1 / b );
128 return ( a - b ).lengthSq();
135 return ( a - b ).length();
142 return a.
x * b.
y - a.
y * b.
x;
149 return a.x * b.x + a.y * b.y;
163 return { a.
x * b.
x,a.
y * b.
y };
170 return { a.
x / b.
x, a.
y / b.
y };
177 return std::atan2( std::abs( cross( a, b ) ), dot( a, b ) );
187 if ( abs( x ) < abs( y ) )
215struct std::hash<
MR::Vector2f>
217 size_t operator()( MR::Vector2f
const& p )
const noexcept
220 static_assert(
sizeof( float ) ==
sizeof( std::uint32_t ) );
221 std::memcpy( &xy, &p.x,
sizeof( std::uint64_t ) );
#define MR_REQUIRES_IF_SUPPORTED(...)
Definition MRMacros.h:34
MR_BIND_IGNORE auto begin(const BitSet &a)
Definition MRMesh/MRBitSet.h:308
MR_BIND_IGNORE auto end(const BitSet &)
Definition MRMesh/MRBitSet.h:310
constexpr T abs(T value)
Definition MRUnsigned.h:18
Definition MRCameraOrientationPlugin.h:8
std::array< Vector3f, 3 > MR_BIND_IGNORE
Definition MRMeshBuilderTypes.h:10
Definition MRMatrix2.h:19
Definition MRMesh/MRMeshFwd.h:90
Definition MRSymMatrix2.h:14
Definition MRVector2.h:28
T x
Definition MRVector2.h:34
Vector2(NoInit) noexcept
Definition MRVector2.h:41
Vector2< T > div(const Vector2< T > &a, const Vector2< T > &b)
per component division
Definition MRVector2.h:168
T cross(const Vector2< T > &a, const Vector2< T > &b)
cross product
Definition MRVector2.h:140
friend constexpr bool operator!=(const Vector2< T > &a, const Vector2< T > &b)
Definition MRVector2.h:90
static constexpr Vector2 plusY() noexcept
Definition MRVector2.h:49
friend constexpr Vector2< T > & operator-=(Vector2< T > &a, const Vector2< T > &b)
Definition MRVector2.h:110
friend constexpr Vector2< T > & operator+=(Vector2< T > &a, const Vector2< T > &b)
Definition MRVector2.h:109
friend constexpr auto operator*(T a, const Vector2< T > &b) -> Vector2< decltype(std::declval< T >() *std::declval< T >())>
Definition MRVector2.h:99
T ValueType
Definition MRVector2.h:29
friend constexpr Vector2< T > & operator/=(Vector2< T > &a, T b)
Definition MRVector2.h:112
T y
Definition MRVector2.h:34
constexpr const T & operator[](int e) const noexcept
Definition MRVector2.h:58
Vector2 normalized() const MR_REQUIRES_IF_SUPPORTED(!std
Definition MRVector2.h:70
friend constexpr bool operator==(const Vector2< T > &a, const Vector2< T > &b)
Definition MRVector2.h:89
constexpr Vector2() noexcept
Definition MRVector2.h:36
Vector2 furthestBasisVector() const MR_REQUIRES_IF_SUPPORTED(!std constexpr Vector2 perpendicular() const MR_REQUIRES_IF_SUPPORTED(!std
returns one of 2 basis unit vector that makes the biggest angle with the direction specified by this
Definition MRVector2.h:82
friend constexpr auto operator/(Vector2< T > b, T a) -> Vector2< decltype(std::declval< T >()/std::declval< T >())>
Definition MRVector2.h:101
static constexpr Vector2 diagonal(T a) noexcept
Definition MRVector2.h:47
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:126
T distance(const Vector2< T > &a, const Vector2< T > &b)
distance between two points, better use distanceSq for higher performance
Definition MRVector2.h:133
static constexpr Vector2 minusY() noexcept MR_REQUIRES_IF_SUPPORTED(!std
Definition MRVector2.h:51
MR_REQUIRES_IF_SUPPORTED(!std::is_same_v< T, U >) const expr explicit Vector2(const Vector2< U > &v) noexcept
Definition MRVector2.h:55
constexpr Vector2(T x, T y) noexcept
Definition MRVector2.h:42
T sqr(const Vector2< T > &a)
squared length
Definition MRVector2.h:154
static constexpr int elements
Definition MRVector2.h:32
auto length() const
Definition MRVector2.h:62
static constexpr Vector2 plusX() noexcept
Definition MRVector2.h:48
auto dot(const Vector2< T > &a, const Vector2< T > &b) -> decltype(a.x *b.x)
dot product
Definition MRVector2.h:147
MR_REQUIRES_IF_SUPPORTED(std::constructible_from< T, U >) explicit const expr Vector2(const Vector3< U > &v) noexcept
Definition MRVector2.h:44
Vector2< T > mult(const Vector2< T > &a, const Vector2< T > &b)
per component multiplication
Definition MRVector2.h:161
friend constexpr Vector2< T > & operator*=(Vector2< T > &a, T b)
Definition MRVector2.h:111
static constexpr Vector2 minusX() noexcept MR_REQUIRES_IF_SUPPORTED(!std
Definition MRVector2.h:50
friend constexpr auto operator-(const Vector2< T > &a) -> Vector2< decltype(-std::declval< T >())>
Definition MRVector2.h:95
T lengthSq() const
Definition MRVector2.h:61
friend constexpr const Vector2< T > & operator+(const Vector2< T > &a)
Definition MRVector2.h:94
T angle(const Vector2< T > &a, const Vector2< T > &b)
angle in radians between two vectors
Definition MRVector2.h:175
bool isFinite() const MR_REQUIRES_IF_SUPPORTED(std
Definition MRVector2.h:84
Definition MRMesh/MRVector3.h:29