12 #include <Utility/String/NRE_String.hpp> 13 #include <Utility/Interfaces/Stringable/NRE_Stringable.hpp> 14 #include "../../NRE_Math.hpp" 29 template<
class>
class Vector3D;
30 template<
class>
class Vector4D;
37 class Vector2D :
public Utility::Stringable<Vector2D<T>> {
38 static_assert(ArithmeticCheckerV<T>);
55 template <
class K,
class L,
typename = UseIfArithmetic<K, L>>
56 constexpr
Vector2D(K nX, L nY) : x(static_cast <T> (nX)), y(static_cast <T> (nY)) {
62 template <
class K,
typename = UseIfArithmetic<K>>
69 constexpr
Vector2D(std::initializer_list<T> list);
76 constexpr
Vector2D(Vector2D
const& u) =
default;
83 constexpr
Vector2D(Vector2D && u) =
default;
115 constexpr T
getX()
const;
119 constexpr T
getY()
const;
123 constexpr T
getW()
const;
127 constexpr T
getH()
const;
134 template <
class K,
typename = UseIfArithmetic<K>>
136 x = static_cast <T> (nX);
142 template <
class K,
typename = UseIfArithmetic<K>>
144 y = static_cast <T> (nY);
150 template <
class K,
typename = UseIfArithmetic<K>>
158 template <
class K,
typename = UseIfArithmetic<K>>
167 template <
class K,
class L,
typename = UseIfArithmetic<K, L>>
177 template <
class K,
class L,
typename = UseIfArithmetic<K, L>>
187 long double norm()
const;
211 template <
class K,
typename = UseIfArithmetic<K>>
223 template <
class K,
typename = UseIfArithmetic<K>>
225 setX(std::pow(static_cast <std::common_type_t<T, K>> (x), static_cast <std::common_type_t<T, K>> (p)));
226 setY(std::pow(static_cast <std::common_type_t<T, K>> (y), static_cast <std::common_type_t<T, K>> (p)));
239 constexpr
const T*
value()
const;
255 constexpr T
const&
operator [](std::size_t index)
const;
263 constexpr Vector2D&
operator =(Vector2D
const& u) =
default;
269 constexpr Vector2D&
operator =(Vector2D && u) =
default;
291 template <
class K,
typename = UseIfArithmetic<K>>
293 setX(static_cast <std::common_type_t<T, K>> (x) + static_cast <std::common_type_t<T, K>> (k));
294 setY(static_cast <std::common_type_t<T, K>> (y) + static_cast <std::common_type_t<T, K>> (k));
309 template <
class K,
typename = UseIfArithmetic<K>>
311 setX(static_cast <std::common_type_t<T, K>> (x) - static_cast <std::common_type_t<T, K>> (k));
312 setY(static_cast <std::common_type_t<T, K>> (y) - static_cast <std::common_type_t<T, K>> (k));
327 template <
class K,
typename = UseIfArithmetic<K>>
329 setX(static_cast <std::common_type_t<T, K>> (x) * static_cast <std::common_type_t<T, K>> (k));
330 setY(static_cast <std::common_type_t<T, K>> (y) * static_cast <std::common_type_t<T, K>> (k));
345 template <
class K,
typename = UseIfArithmetic<K>>
347 setX(static_cast <std::common_type_t<T, K>> (x) / static_cast <std::common_type_t<T, K>> (k));
348 setY(static_cast <std::common_type_t<T, K>> (y) / static_cast <std::common_type_t<T, K>> (k));
372 template <
class K,
typename = UseIfArithmetic<K>>
388 template <
class K,
typename = UseIfArithmetic<K>>
409 template <
class K,
typename = UseIfArithmetic<K>>
425 template <
class K,
typename = UseIfArithmetic<K>>
465 constexpr
bool operator <(Vector2D<K>
const& u)
const;
479 constexpr
bool operator <=(Vector2D<K>
const& u)
const;
502 template <
class T,
class K,
typename = UseIfArithmetic<K>>
519 template <
class T,
class K,
typename = UseIfArithmetic<K>>
529 template <
class T,
class K>
537 template <
class T,
class K>
550 template <
class T,
class K>
556 #include "NRE_Vector2D.tpp" constexpr bool operator!=(Vector2D< K > const &u) const
constexpr const T * value() const
A cartesian 2D vector.
Definition: NRE_Matrix3x3.hpp:32
constexpr bool operator>(Vector2D< K > const &u) const
constexpr Vector2D & operator+=(K k)
Definition: NRE_Vector2D.hpp:292
constexpr void setX(K nX)
Definition: NRE_Vector2D.hpp:135
constexpr T normSquared() const
constexpr bool operator==(Vector2D< K > const &u) const
constexpr Vector2D & operator-=(K k)
Definition: NRE_Vector2D.hpp:310
constexpr std::common_type_t< T, K > operator|=(Vector2D< K > const &u) const
constexpr Vector2D< std::common_type_t< T, K > > operator+(K k) const
Definition: NRE_Vector2D.hpp:373
constexpr Vector2D< std::common_type_t< T, K > > operator/(K k) const
Definition: NRE_Vector2D.hpp:426
constexpr std::common_type_t< T, K > distanceSquared(Vector2D< K > const &v) const
The stl standard namespace.
constexpr Vector2D(K nX, L nY)
Definition: NRE_Vector2D.hpp:56
A cartesian 3D vector, 2D homogeneous.
Definition: NRE_Matrix3x3.hpp:33
constexpr void setSize(K w, L h)
Definition: NRE_Vector2D.hpp:178
long double distance(Vector2D< K > const &v) const
constexpr void setW(K w)
Definition: NRE_Vector2D.hpp:151
Utility::String toString() const
constexpr void setY(K nY)
Definition: NRE_Vector2D.hpp:143
Vector2D & pow(K p)
Definition: NRE_Vector2D.hpp:224
constexpr Vector2D & operator=(Vector2D const &u)=default
constexpr Vector2D & operator/=(K k)
Definition: NRE_Vector2D.hpp:346
constexpr Vector2D()=default
constexpr bool operator>=(Vector2D< K > const &u) const
The NearlyRealEngine's global namespace.
constexpr void setH(K h)
Definition: NRE_Vector2D.hpp:159
A cartesian 4D vector, 3D homogeneous.
Definition: NRE_Matrix4x4.hpp:34
constexpr std::common_type_t< T, K > operator|(Vector2D< K > const &u) const
constexpr Vector2D< std::common_type_t< T, K > > operator*(K k) const
Definition: NRE_Vector2D.hpp:410
constexpr Vector2D(K value)
Definition: NRE_Vector2D.hpp:63
constexpr Vector2D< std::common_type_t< T, K > > reflect(Vector2D< T > const &u, Vector2D< K > const &n)
void limit(K max)
Definition: NRE_Vector2D.hpp:212
constexpr Vector2D operator-() const
constexpr void setCoord(K nX, L nY)
Definition: NRE_Vector2D.hpp:168
constexpr T & operator[](std::size_t index)
constexpr Vector2D & operator*=(K k)
Definition: NRE_Vector2D.hpp:328