6#include "MRPch/MRBindingMacros.h"
18#pragma warning(disable: 4804)
19#pragma warning(disable: 4146)
40 static_assert(
elements == 2,
"Invalid number of elements" );
57 constexpr explicit Vector2(
const Vector2<U> & v ) noexcept :
x( T( v.x ) ),
y( T( v.y ) ) { }
76 return ( 1 / len ) * (*this);
87 return std::isfinite(
x ) && std::isfinite(
y );
104 if constexpr ( std::is_integral_v<T> )
105 return { b.x / a, b.y / a };
107 return b * ( 1 / a );
115 if constexpr ( std::is_integral_v<T> )
116 { a.
x /= b; a.
y /= b;
return a; }
118 return a *= ( 1 / b );
123 return s << vec.
x <<
' ' << vec.
y;
128 return s >> vec.
x >> vec.
y;
139 return ( a - b ).lengthSq();
146 return ( a - b ).length();
153 return a.
x * b.
y - a.
y * b.
x;
160 return a.x * b.x + a.y * b.y;
174 return { a.
x * b.
x,a.
y * b.
y };
181 return { a.
x / b.
x, a.
y / b.
y };
188 return std::atan2( std::abs( cross( a, b ) ), dot( a, b ) );
198 if ( abs( x ) < abs( y ) )
226struct std::hash<
MR::Vector2f>
228 size_t operator()( MR::Vector2f
const& p )
const noexcept
231 static_assert(
sizeof( float ) ==
sizeof( std::uint32_t ) );
232 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:380
MR_BIND_IGNORE auto end(const BitSet &)
Definition MRMesh/MRBitSet.h:382
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:21
Definition MRMeshFwd.h:94
Definition MRSymMatrix2.h:14
Definition MRVector2.h:29
T x
Definition MRVector2.h:35
Vector2(NoInit) noexcept
Definition MRVector2.h:42
Vector2< T > div(const Vector2< T > &a, const Vector2< T > &b)
per component division
Definition MRVector2.h:179
T cross(const Vector2< T > &a, const Vector2< T > &b)
cross product
Definition MRVector2.h:151
friend constexpr bool operator!=(const Vector2< T > &a, const Vector2< T > &b)
Definition MRVector2.h:91
static constexpr Vector2 plusY() noexcept
Definition MRVector2.h:50
friend constexpr Vector2< T > & operator-=(Vector2< T > &a, const Vector2< T > &b)
Definition MRVector2.h:111
friend constexpr Vector2< T > & operator+=(Vector2< T > &a, const Vector2< T > &b)
Definition MRVector2.h:110
friend constexpr auto operator*(T a, const Vector2< T > &b) -> Vector2< decltype(std::declval< T >() *std::declval< T >())>
Definition MRVector2.h:100
T ValueType
Definition MRVector2.h:30
friend constexpr Vector2< T > & operator/=(Vector2< T > &a, T b)
Definition MRVector2.h:113
T y
Definition MRVector2.h:35
friend std::istream & operator>>(std::istream &s, Vector2 &vec)
Definition MRVector2.h:126
constexpr const T & operator[](int e) const noexcept
Definition MRVector2.h:59
Vector2 normalized() const MR_REQUIRES_IF_SUPPORTED(!std
Definition MRVector2.h:71
friend constexpr bool operator==(const Vector2< T > &a, const Vector2< T > &b)
Definition MRVector2.h:90
constexpr Vector2() noexcept
Definition MRVector2.h:37
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:83
friend constexpr auto operator/(Vector2< T > b, T a) -> Vector2< decltype(std::declval< T >()/std::declval< T >())>
Definition MRVector2.h:102
static constexpr Vector2 diagonal(T a) noexcept
Definition MRVector2.h:48
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:137
T distance(const Vector2< T > &a, const Vector2< T > &b)
distance between two points, better use distanceSq for higher performance
Definition MRVector2.h:144
static constexpr Vector2 minusY() noexcept MR_REQUIRES_IF_SUPPORTED(!std
Definition MRVector2.h:52
MR_REQUIRES_IF_SUPPORTED(!std::is_same_v< T, U >) const expr explicit Vector2(const Vector2< U > &v) noexcept
Definition MRVector2.h:56
constexpr Vector2(T x, T y) noexcept
Definition MRVector2.h:43
T sqr(const Vector2< T > &a)
squared length
Definition MRVector2.h:165
static constexpr int elements
Definition MRVector2.h:33
auto length() const
Definition MRVector2.h:63
static constexpr Vector2 plusX() noexcept
Definition MRVector2.h:49
auto dot(const Vector2< T > &a, const Vector2< T > &b) -> decltype(a.x *b.x)
dot product
Definition MRVector2.h:158
MR_REQUIRES_IF_SUPPORTED(std::constructible_from< T, U >) explicit const expr Vector2(const Vector3< U > &v) noexcept
Definition MRVector2.h:45
Vector2< T > mult(const Vector2< T > &a, const Vector2< T > &b)
per component multiplication
Definition MRVector2.h:172
friend constexpr Vector2< T > & operator*=(Vector2< T > &a, T b)
Definition MRVector2.h:112
static constexpr Vector2 minusX() noexcept MR_REQUIRES_IF_SUPPORTED(!std
Definition MRVector2.h:51
friend constexpr auto operator-(const Vector2< T > &a) -> Vector2< decltype(-std::declval< T >())>
Definition MRVector2.h:96
T lengthSq() const
Definition MRVector2.h:62
friend constexpr const Vector2< T > & operator+(const Vector2< T > &a)
Definition MRVector2.h:95
friend std::ostream & operator<<(std::ostream &s, const Vector2 &vec)
Definition MRVector2.h:121
T angle(const Vector2< T > &a, const Vector2< T > &b)
angle in radians between two vectors
Definition MRVector2.h:186
bool isFinite() const MR_REQUIRES_IF_SUPPORTED(std
Definition MRVector2.h:85
Definition MRMesh/MRVector3.h:30