8template <
typename T, std::
size_t N>
20 for (
size_t i = 0; i < N; ++i) {
25 template <
typename... Args>
27 requires(
sizeof...(Args) > 1)
28 :
data({std::forward<Args>(args)...}) {}
31 [[nodiscard]]
auto xyz()
const {
32 static_assert(N > 3,
"xyz swizzle requires 4 or more components ");
36 auto at(std::size_t i) -> T& {
return data.at(i); }
37 [[nodiscard]]
auto at(std::size_t i)
const {
return data.at(i); }
40 for (
auto& d :
data) {
47 for (std::size_t i = 0; i < N; i++) v.
data.at(i) =
data.at(i) * scalar;
52 for (std::size_t i = 0; i < N; i++) {
59 for (std::size_t i = 0; i < N; i++) {
60 v.data.at(i) =
data.at(i) * other.
data.at(i);
65 [[nodiscard]]
constexpr auto dot(
const vec_t& other)
const {
67 for (std::size_t i = 0; i < N; i++)
73 for (std::size_t i = 0; i < N; i++)
79 for (std::size_t i = 0; i < N; i++)
85 for (std::size_t i = 0; i < N; i++) {
92 for (std::size_t i = 0; i < N; i++)
99 for (std::size_t i = 0; i < N; i++) v.
data.at(i) = -
data.at(i);
105 for (std::size_t i = 0; i < N; i++) v.
data.at(i) =
data.at(i) / scalar;
114 return !(*
this == other);
117 [[nodiscard]]
constexpr auto length()
const {
119 for (
const auto& d :
data) sum += d * d;
120 return std::sqrt(sum);
128template <
typename T, std::
size_t N>
147 [[nodiscard]]
auto x()
const {
return data.at(0); }
149 [[nodiscard]]
auto y()
const {
return data.at(1); }
160 [[nodiscard]]
auto x()
const {
return data.at(0); }
162 [[nodiscard]]
auto y()
const {
return data.at(1); }
164 [[nodiscard]]
auto z()
const {
return data.at(2); }
168 return Vec3f{
y() * other.
z() -
z() * other.
y(),
169 z() * other.
x() -
x() * other.
z(),
170 x() * other.
y() -
y() * other.
x()};
179 :
Vec<float, 4>(vec.
x(), vec.
y(), vec.
z(),
w) {}
183 [[nodiscard]]
auto x()
const {
return data.at(0); }
184 [[nodiscard]]
auto y()
const {
return data.at(1); }
185 [[nodiscard]]
auto z()
const {
return data.at(2); }
186 [[nodiscard]]
auto w()
const {
return data.at(3); }
Definition geometry.hpp:8
auto operator*(float scalar, Vec< T, N > vec) -> Vec< T, N >
Definition vector.hpp:129
Definition vector.hpp:142
auto x() const
Definition vector.hpp:147
Vec2f(float x, float y)
Definition vector.hpp:144
Vec2f(const Vec< float, 2 > &other)
Definition vector.hpp:145
Vec2f()
Definition vector.hpp:143
auto y() const
Definition vector.hpp:149
auto y(float y)
Definition vector.hpp:150
auto x(float x)
Definition vector.hpp:148
Definition vector.hpp:153
auto z(float z)
Definition vector.hpp:165
Vec3f(const auto &other)
Definition vector.hpp:155
Vec3f(float x, float y, float z)
Definition vector.hpp:157
auto y() const
Definition vector.hpp:162
Vec3f(const Vec< float, 3 > &other)
Definition vector.hpp:158
Vec3f()
Definition vector.hpp:154
auto z() const
Definition vector.hpp:164
auto x() const
Definition vector.hpp:160
auto x(float x)
Definition vector.hpp:161
auto operator%(const Vec3f &other) const
Definition vector.hpp:167
auto y(float y)
Definition vector.hpp:163
Definition vector.hpp:174
auto z() const
Definition vector.hpp:185
auto x() const
Definition vector.hpp:183
Vec4f(const auto &other)
Definition vector.hpp:176
auto w() const
Definition vector.hpp:186
Vec4f(float x, float y, float z, float w)
Definition vector.hpp:177
auto y() const
Definition vector.hpp:184
Vec4f(const Vec< float, 4 > &other)
Definition vector.hpp:180
Vec4f()
Definition vector.hpp:175
Vec4f(const Vec3f &vec, float w)
Definition vector.hpp:178
Vec(std::array< T, N > data)
Definition vector.hpp:18
constexpr auto operator*=(float scalar) const
Definition vector.hpp:39
constexpr auto operator==(const vec_t &other) const
Definition vector.hpp:109
std::array< T, N > data
Definition vector.hpp:125
constexpr auto length() const
Definition vector.hpp:117
constexpr auto operator*=(const vec_t &other)
Definition vector.hpp:51
constexpr auto operator+=(const vec_t &other)
Definition vector.hpp:72
auto xyz() const
Definition vector.hpp:31
auto normalized() const
Definition vector.hpp:123
Vec(float scalar)
Definition vector.hpp:19
static auto unit_z()
Definition vector.hpp:14
static auto unit_x()
Definition vector.hpp:12
constexpr auto operator-() const
Definition vector.hpp:97
static auto unit_y()
Definition vector.hpp:13
constexpr auto operator-=(const vec_t &other)
Definition vector.hpp:84
Vec()
Definition vector.hpp:16
constexpr auto operator-(const vec_t &other) const
Definition vector.hpp:90
constexpr auto dot(const vec_t &other) const
Definition vector.hpp:65
auto at(std::size_t i) const
Definition vector.hpp:37
constexpr auto operator*(const vec_t &other) const
Definition vector.hpp:57
constexpr auto operator+(const vec_t &other) const
Definition vector.hpp:77
auto operator/(float scalar) const
Definition vector.hpp:103
constexpr auto operator*(float scalar) const
Definition vector.hpp:45
auto at(std::size_t i) -> T &
Definition vector.hpp:36
constexpr auto operator!=(const vec_t &other) const
Definition vector.hpp:113
Vec(Args... args)
Definition vector.hpp:26