12 #include <Utility/String/NRE_String.hpp> 13 #include <Utility/Interfaces/Stringable/NRE_Stringable.hpp> 14 #include "../../NRE_Math.hpp" 27 template<
class>
class Vector2D;
28 template<
class>
class Vector4D;
35 class Vector3D :
public Utility::Stringable<Vector3D<T>> {
36 static_assert(ArithmeticCheckerV<T>);
55 template <
class K,
class L,
class N,
typename = UseIfArithmetic<K, L, N>>
56 constexpr
Vector3D(K nX, L nY, N nZ) : x(static_cast <T> (nX)), y(static_cast <T> (nY)), z(static_cast <T> (nZ)) {
62 template <
class K,
typename = UseIfArithmetic<K>>
69 constexpr
Vector3D(std::initializer_list<T> list);
76 constexpr
Vector3D(Vector3D
const& u) =
default;
83 constexpr
Vector3D(Vector3D && u) =
default;
109 template <
class K,
class L,
typename = UseIfArithmetic<L>>
123 constexpr T
getX()
const;
127 constexpr T
getY()
const;
131 constexpr T
getZ()
const;
135 constexpr T
getR()
const;
139 constexpr T
getG()
const;
143 constexpr T
getB()
const;
150 template <
class K,
typename = UseIfArithmetic<K>>
152 x = static_cast <T> (nX);
158 template <
class K,
typename = UseIfArithmetic<K>>
160 y = static_cast <T> (nY);
166 template <
class K,
typename = UseIfArithmetic<K>>
168 z = static_cast <T> (nZ);
174 template <
class K,
typename = UseIfArithmetic<K>>
182 template <
class K,
typename = UseIfArithmetic<K>>
190 template <
class K,
typename = UseIfArithmetic<K>>
200 template <
class K,
class L,
class N,
typename = UseIfArithmetic<K, L, N>>
211 template <
class K,
class L,
typename = UseIfArithmetic<L>>
223 template <
class K,
class L,
class N,
typename = UseIfArithmetic<K, L, N>>
234 long double norm()
const;
258 template <
class K,
typename = UseIfArithmetic<K>>
270 template <
class K,
typename = UseIfArithmetic<K>>
272 setX(std::pow(static_cast <std::common_type_t<T, K>> (x), static_cast <std::common_type_t<T, K>> (p)));
273 setY(std::pow(static_cast <std::common_type_t<T, K>> (y), static_cast <std::common_type_t<T, K>> (p)));
274 setZ(std::pow(static_cast <std::common_type_t<T, K>> (z), static_cast <std::common_type_t<T, K>> (p)));
287 constexpr
const T*
value()
const;
303 constexpr T
const&
operator [](std::size_t index)
const;
311 constexpr Vector3D&
operator =(Vector3D
const& u) =
default;
317 constexpr Vector3D&
operator =(Vector3D && u) =
default;
339 template <
class K,
typename = UseIfArithmetic<K>>
341 setX(static_cast <std::common_type_t<T, K>> (x) + static_cast <std::common_type_t<T, K>> (k));
342 setY(static_cast <std::common_type_t<T, K>> (y) + static_cast <std::common_type_t<T, K>> (k));
343 setZ(static_cast <std::common_type_t<T, K>> (z) + static_cast <std::common_type_t<T, K>> (k));
358 template <
class K,
typename = UseIfArithmetic<K>>
360 setX(static_cast <std::common_type_t<T, K>> (x) - static_cast <std::common_type_t<T, K>> (k));
361 setY(static_cast <std::common_type_t<T, K>> (y) - static_cast <std::common_type_t<T, K>> (k));
362 setZ(static_cast <std::common_type_t<T, K>> (z) - static_cast <std::common_type_t<T, K>> (k));
377 template <
class K,
typename = UseIfArithmetic<K>>
379 setX(static_cast <std::common_type_t<T, K>> (x) * static_cast <std::common_type_t<T, K>> (k));
380 setY(static_cast <std::common_type_t<T, K>> (y) * static_cast <std::common_type_t<T, K>> (k));
381 setZ(static_cast <std::common_type_t<T, K>> (z) * static_cast <std::common_type_t<T, K>> (k));
396 template <
class K,
typename = UseIfArithmetic<K>>
398 setX(static_cast <std::common_type_t<T, K>> (x) / static_cast <std::common_type_t<T, K>> (k));
399 setY(static_cast <std::common_type_t<T, K>> (y) / static_cast <std::common_type_t<T, K>> (k));
400 setZ(static_cast <std::common_type_t<T, K>> (z) / static_cast <std::common_type_t<T, K>> (k));
431 template <
class K,
typename = UseIfArithmetic<K>>
447 template <
class K,
typename = UseIfArithmetic<K>>
468 template <
class K,
typename = UseIfArithmetic<K>>
484 template <
class K,
typename = UseIfArithmetic<K>>
531 constexpr
bool operator <(Vector3D<K>
const& u)
const;
545 constexpr
bool operator <=(Vector3D<K>
const& u)
const;
568 template <
class T,
class K,
typename = UseIfArithmetic<K>>
585 template <
class T,
class K,
typename = UseIfArithmetic<K>>
595 template <
class T,
class K>
603 template <
class T,
class K>
616 template <
class T,
class K>
633 static constexpr
size_t keep = 21;
634 static constexpr
size_t hashSize =
sizeof(size_t) * 8;
641 memcpy(&iX, &x,
sizeof(x));
642 iX <<= hashSize - keep;
643 iX &= 0xFFFFF80000000000;
644 memcpy(&iY, &y,
sizeof(y));
645 iY <<= hashSize - (keep * 2);
646 iY &= 0x000007FFFFC00000;
647 memcpy(&iZ, &z,
sizeof(z));
648 iZ <<= hashSize - (keep * 3);
649 iZ &= 0x00000000003FFFFE;
655 #include "NRE_Vector3D.tpp" constexpr Vector3D operator-() const
A cartesian 2D vector.
Definition: NRE_Matrix3x3.hpp:32
constexpr bool operator>(Vector3D< K > const &u) const
constexpr Vector3D< std::common_type_t< T, K > > operator^(Vector3D< K > const &u) const
constexpr bool operator!=(Vector3D< K > const &u) const
constexpr void setX(K nX)
Definition: NRE_Vector3D.hpp:151
constexpr Vector3D & operator+=(K k)
Definition: NRE_Vector3D.hpp:340
constexpr void setR(K r)
Definition: NRE_Vector3D.hpp:175
constexpr Vector3D & operator*=(K k)
Definition: NRE_Vector3D.hpp:378
Manage hashing for specialized version.
Vector3D & pow(K p)
Definition: NRE_Vector3D.hpp:271
constexpr Vector3D & operator=(Vector3D const &u)=default
constexpr Vector3D< std::common_type_t< T, K > > operator/(K k) const
Definition: NRE_Vector3D.hpp:485
constexpr T & operator[](std::size_t index)
constexpr Vector3D(K value)
Definition: NRE_Vector3D.hpp:63
constexpr bool operator>=(Vector3D< K > const &u) const
The stl standard namespace.
Utility::String toString() const
A cartesian 3D vector, 2D homogeneous.
Definition: NRE_Matrix3x3.hpp:33
constexpr std::common_type_t< T, K > operator|=(Vector3D< K > const &u) const
constexpr void setY(K nY)
Definition: NRE_Vector3D.hpp:159
constexpr void setB(K b)
Definition: NRE_Vector3D.hpp:191
constexpr std::common_type_t< T, K > distanceSquared(Vector3D< K > const &v) const
constexpr void setCoord(Vector2D< K > const &u, L nZ)
Definition: NRE_Vector3D.hpp:212
constexpr void setG(K g)
Definition: NRE_Vector3D.hpp:183
constexpr bool operator==(Vector3D< K > const &u) const
constexpr const T * value() const
size_t operator()(NRE::Math::Vector3D< float > const &p) const
Definition: NRE_Vector3D.hpp:632
The NearlyRealEngine's global namespace.
A cartesian 4D vector, 3D homogeneous.
Definition: NRE_Matrix4x4.hpp:34
constexpr Vector3D()=default
constexpr Vector3D< std::common_type_t< T, K > > operator+(K k) const
Definition: NRE_Vector3D.hpp:432
constexpr std::common_type_t< T, K > operator|(Vector3D< K > const &u) const
constexpr void setCoord(K nX, L nY, N nZ)
Definition: NRE_Vector3D.hpp:201
constexpr T normSquared() const
constexpr Vector2D< std::common_type_t< T, K > > reflect(Vector2D< T > const &u, Vector2D< K > const &n)
constexpr Vector3D & operator/=(K k)
Definition: NRE_Vector3D.hpp:397
constexpr Vector3D(Vector2D< K > const &u, L nZ)
Definition: NRE_Vector3D.hpp:110
long double distance(Vector3D< K > const &v) const
constexpr Vector3D(K nX, L nY, N nZ)
Definition: NRE_Vector3D.hpp:56
constexpr void setRGB(K r, L g, N b)
Definition: NRE_Vector3D.hpp:224
constexpr void setZ(K nZ)
Definition: NRE_Vector3D.hpp:167
constexpr Vector3D & operator-=(K k)
Definition: NRE_Vector3D.hpp:359
constexpr Vector3D< std::common_type_t< T, K > > operator*(K k) const
Definition: NRE_Vector3D.hpp:469
constexpr Vector3D & operator^=(Vector3D< K > const &u)
void limit(K max)
Definition: NRE_Vector3D.hpp:259