30 explicit Vector3(
const T value) noexcept : x(value), y(value), z(value) {}
31 Vector3(
const T x,
const T y,
const T z) noexcept : x(x), y(y), z(z) {}
32 Vector3(
const Vector3& other) noexcept : x(other.x), y(other.y), z(other.z) {}
33 Vector3(Vector3&& other) noexcept : x(std::move(other.x)), y(std::move(other.y)), z(std::move(other.z)) {}
35 ~Vector3()
noexcept =
default;
39 Vector3& operator=(
const Vector3& rhs)
noexcept
50 Vector3& operator=(Vector3&& rhs)
noexcept
61 Vector3 operator+(
const Vector3& rhs)
const noexcept
63 return Vector3(x + rhs.x, y + rhs.y, z + rhs.z);
65 Vector3 operator-(
const Vector3& rhs)
const noexcept
67 return Vector3(x - rhs.x, y - rhs.y, z - rhs.z);
69 Vector3 operator*(
const T scalar)
const noexcept
71 return Vector3(x * scalar, y * scalar, z * scalar);
73 Vector3 operator/(
const T scalar)
const
80 const T inv_scalar{
static_cast<T
>(1.0) / scalar};
81 return Vector3(x * inv_scalar, y * inv_scalar, z * inv_scalar);
83 Vector3& operator+=(
const Vector3& rhs)
noexcept
90 Vector3 operator-=(
const Vector3& rhs)
noexcept
97 Vector3& operator*=(
const T scalar)
noexcept
104 Vector3& operator/=(
const T scalar)
111 const T inv_scalar{
static_cast<T
>(1.0) / scalar};
117 bool operator==(
const Vector3& rhs)
const
126 T getX()
const noexcept {
return x; }
127 T getY()
const noexcept {
return y; }
128 T getZ()
const noexcept {
return z; }
130 void setX(
const T value)
noexcept { x = value; }
131 void setY(
const T value)
noexcept { y = value; }
132 void setZ(
const T value)
noexcept { z = value; }
141 return std::format(
"[{:f}, {:f}, {:f}]", x, y, z);
151 return std::sqrt(x * x + y * y + z * z);
159 return x * x + y * y + z * z;
173 const T inv_magnitude{
static_cast<T
>(1.0) / magnitude};
190 T
dot(
const Vector3& rhs)
const noexcept
192 return x * rhs.x + y * rhs.y + z * rhs.z;
198 Vector3
cross(
const Vector3& rhs)
const noexcept
200 return Vector3(y * rhs.z - z *rhs.y,
201 z * rhs.x - x * rhs.z,
202 x * rhs.y - y * rhs.x);