12 #include <type_traits> 15 #include <Utility/String/NRE_String.hpp> 16 #include <Utility/Interfaces/Stringable/NRE_Stringable.hpp> 17 #include "../../NRE_Math.hpp" 30 template<
class>
class Vector2D;
31 template<
class>
class Vector3D;
38 class Vector4D :
public Utility::Stringable<Vector4D<T>> {
39 static_assert(ArithmeticCheckerV<T>);
60 template <
class K,
class L,
class N,
class M,
typename = UseIfArithmetic<K, L, N, M>>
61 constexpr
Vector4D(K nX, L nY, N nZ, M nW) : x(static_cast <T> (nX)), y(static_cast <T> (nY)), z(static_cast <T> (nZ)), w(static_cast <T> (nW)) {
67 template <
class K,
typename = UseIfArithmetic<K>>
74 constexpr
Vector4D(std::initializer_list<T> list);
81 constexpr
Vector4D(Vector4D
const& u) =
default;
88 constexpr
Vector4D(Vector4D && u) =
default;
109 template <
class K,
class L,
class N,
typename = UseIfArithmetic<L, N>>
123 template <
class K,
class L,
typename = UseIfArithmetic<L>>
137 constexpr T
getX()
const;
141 constexpr T
getY()
const;
145 constexpr T
getZ()
const;
149 constexpr T
getW()
const;
153 constexpr T
getR()
const;
157 constexpr T
getG()
const;
161 constexpr T
getB()
const;
165 constexpr T
getA()
const;
172 template <
class K,
typename = UseIfArithmetic<K>>
174 x = static_cast <T> (nX);
180 template <
class K,
typename = UseIfArithmetic<K>>
182 y = static_cast <T> (nY);
188 template <
class K,
typename = UseIfArithmetic<K>>
190 z = static_cast <T> (nZ);
196 template <
class K,
typename = UseIfArithmetic<K>>
198 w = static_cast <T> (nW);
204 template <
class K,
typename = UseIfArithmetic<K>>
212 template <
class K,
typename = UseIfArithmetic<K>>
220 template <
class K,
typename = UseIfArithmetic<K>>
228 template <
class K,
typename = UseIfArithmetic<K>>
239 template <
class K,
class L,
class N,
class M,
typename = UseIfArithmetic<K, L, N, M>>
252 template <
class K,
class L,
class N,
typename = UseIfArithmetic<L, N>>
264 template <
class K,
class L,
typename = UseIfArithmetic<L>>
278 template <
class K,
class L,
class N,
class M,
typename = UseIfArithmetic<K, L, N, M>>
290 template <
class K,
class L,
typename = UseIfArithmetic<L>>
302 long double norm()
const;
326 template <
class K,
typename = UseIfArithmetic<K>>
338 template <
class K,
typename = UseIfArithmetic<K>>
340 setX(std::pow(static_cast <std::common_type_t<T, K>> (x), static_cast <std::common_type_t<T, K>> (p)));
341 setY(std::pow(static_cast <std::common_type_t<T, K>> (y), static_cast <std::common_type_t<T, K>> (p)));
342 setZ(std::pow(static_cast <std::common_type_t<T, K>> (z), static_cast <std::common_type_t<T, K>> (p)));
343 setW(std::pow(static_cast <std::common_type_t<T, K>> (w), static_cast <std::common_type_t<T, K>> (p)));
356 constexpr
const T*
value()
const;
372 constexpr T
const&
operator [](std::size_t index)
const;
380 constexpr Vector4D&
operator =(Vector4D
const& u) =
default;
386 constexpr Vector4D&
operator =(Vector4D && u) =
default;
408 template <
class K,
typename = UseIfArithmetic<K>>
410 setX(static_cast <std::common_type_t<T, K>> (x) + static_cast <std::common_type_t<T, K>> (k));
411 setY(static_cast <std::common_type_t<T, K>> (y) + static_cast <std::common_type_t<T, K>> (k));
412 setZ(static_cast <std::common_type_t<T, K>> (z) + static_cast <std::common_type_t<T, K>> (k));
413 setW(static_cast <std::common_type_t<T, K>> (w) + static_cast <std::common_type_t<T, K>> (k));
428 template <
class K,
typename = UseIfArithmetic<K>>
430 setX(static_cast <std::common_type_t<T, K>> (x) - static_cast <std::common_type_t<T, K>> (k));
431 setY(static_cast <std::common_type_t<T, K>> (y) - static_cast <std::common_type_t<T, K>> (k));
432 setZ(static_cast <std::common_type_t<T, K>> (z) - static_cast <std::common_type_t<T, K>> (k));
433 setW(static_cast <std::common_type_t<T, K>> (w) - static_cast <std::common_type_t<T, K>> (k));
448 template <
class K,
typename = UseIfArithmetic<K>>
450 setX(static_cast <std::common_type_t<T, K>> (x) * static_cast <std::common_type_t<T, K>> (k));
451 setY(static_cast <std::common_type_t<T, K>> (y) * static_cast <std::common_type_t<T, K>> (k));
452 setZ(static_cast <std::common_type_t<T, K>> (z) * static_cast <std::common_type_t<T, K>> (k));
453 setW(static_cast <std::common_type_t<T, K>> (w) * static_cast <std::common_type_t<T, K>> (k));
468 template <
class K,
typename = UseIfArithmetic<K>>
470 setX(static_cast <std::common_type_t<T, K>> (x) / static_cast <std::common_type_t<T, K>> (k));
471 setY(static_cast <std::common_type_t<T, K>> (y) / static_cast <std::common_type_t<T, K>> (k));
472 setZ(static_cast <std::common_type_t<T, K>> (z) / static_cast <std::common_type_t<T, K>> (k));
473 setW(static_cast <std::common_type_t<T, K>> (w) / static_cast <std::common_type_t<T, K>> (k));
504 template <
class K,
typename = UseIfArithmetic<K>>
520 template <
class K,
typename = UseIfArithmetic<K>>
541 template <
class K,
typename = UseIfArithmetic<K>>
557 template <
class K,
typename = UseIfArithmetic<K>>
604 constexpr
bool operator <(Vector4D<K>
const& u)
const;
618 constexpr
bool operator <=(Vector4D<K>
const& u)
const;
641 template <
class T,
class K,
typename = UseIfArithmetic<K>>
658 template <
class T,
class K,
typename = UseIfArithmetic<K>>
668 template <
class T,
class K>
676 template <
class T,
class K>
689 template <
class T,
class K>
695 #include "NRE_Vector4D.tpp" constexpr void setR(K r)
Definition: NRE_Vector4D.hpp:205
constexpr Vector4D & operator*=(K k)
Definition: NRE_Vector4D.hpp:449
A cartesian 2D vector.
Definition: NRE_Matrix3x3.hpp:32
constexpr void setY(K nY)
Definition: NRE_Vector4D.hpp:181
constexpr Vector4D(Vector3D< K > const &u, L nW)
Definition: NRE_Vector4D.hpp:124
constexpr Vector4D & operator/=(K k)
Definition: NRE_Vector4D.hpp:469
constexpr void setB(K b)
Definition: NRE_Vector4D.hpp:221
constexpr Vector4D & operator+=(K k)
Definition: NRE_Vector4D.hpp:409
constexpr void setCoord(Vector2D< K > const &u, L nZ, N nW)
Definition: NRE_Vector4D.hpp:253
constexpr const T * value() const
constexpr T & operator[](std::size_t index)
constexpr Vector4D< std::common_type_t< T, K > > operator/(K k) const
Definition: NRE_Vector4D.hpp:558
constexpr T normSquared() const
constexpr bool operator==(Vector4D< K > const &u) const
constexpr Vector4D(K value)
Definition: NRE_Vector4D.hpp:68
constexpr bool operator!=(Vector4D< K > const &u) const
constexpr void setRGBA(K r, L g, N b, M a)
Definition: NRE_Vector4D.hpp:279
constexpr Vector4D< std::common_type_t< T, K > > operator^(Vector4D< K > const &u) const
Utility::String toString() const
constexpr std::common_type_t< T, K > operator|=(Vector4D< K > const &u) const
The stl standard namespace.
constexpr void setCoord(K nX, L nY, N nZ, M nW)
Definition: NRE_Vector4D.hpp:240
A cartesian 3D vector, 2D homogeneous.
Definition: NRE_Matrix3x3.hpp:33
constexpr Vector4D operator-() const
constexpr void setZ(K nZ)
Definition: NRE_Vector4D.hpp:189
constexpr Vector4D()=default
constexpr bool operator>(Vector4D< K > const &u) const
constexpr Vector4D & operator^=(Vector4D< K > const &u)
constexpr Vector4D< std::common_type_t< T, K > > operator+(K k) const
Definition: NRE_Vector4D.hpp:505
constexpr Vector4D(K nX, L nY, N nZ, M nW)
Definition: NRE_Vector4D.hpp:61
constexpr Vector4D & operator=(Vector4D const &u)=default
constexpr void setRGBA(Vector3D< K > const &u, L a)
Definition: NRE_Vector4D.hpp:291
The NearlyRealEngine's global namespace.
constexpr void setX(K nX)
Definition: NRE_Vector4D.hpp:173
long double distance(Vector4D< K > const &v) const
A cartesian 4D vector, 3D homogeneous.
Definition: NRE_Matrix4x4.hpp:34
constexpr void setCoord(Vector3D< K > const &u, L nW)
Definition: NRE_Vector4D.hpp:265
constexpr Vector4D(Vector2D< K > const &u, L nZ, N nW)
Definition: NRE_Vector4D.hpp:110
constexpr std::common_type_t< T, K > distanceSquared(Vector4D< K > const &v) const
constexpr Vector2D< std::common_type_t< T, K > > reflect(Vector2D< T > const &u, Vector2D< K > const &n)
constexpr Vector4D< std::common_type_t< T, K > > operator*(K k) const
Definition: NRE_Vector4D.hpp:542
void limit(K max)
Definition: NRE_Vector4D.hpp:327
Vector4D & pow(K p)
Definition: NRE_Vector4D.hpp:339
constexpr void setA(K a)
Definition: NRE_Vector4D.hpp:229
constexpr Vector4D & operator-=(K k)
Definition: NRE_Vector4D.hpp:429
constexpr std::common_type_t< T, K > operator|(Vector4D< K > const &u) const
constexpr void setG(K g)
Definition: NRE_Vector4D.hpp:213
constexpr bool operator>=(Vector4D< K > const &u) const
constexpr void setW(K nW)
Definition: NRE_Vector4D.hpp:197