8template <
typename T, std::
size_t N>
23 auto at(std::size_t i) -> T& {
return data.at(i); }
24 [[nodiscard]]
auto at(std::size_t i)
const {
return data.at(i); }
27 for (
auto& d :
data) {
34 for (std::size_t i = 0; i < N; i++) v.
data.at(i) =
data.at(i) * scalar;
39 for (std::size_t i = 0; i < N; i++) {
46 for (std::size_t i = 0; i < N; i++) {
52 [[nodiscard]]
constexpr auto dot(
const vec_t& other)
const {
56 for (std::size_t i = 0; i < N; i++)
dot += a.data.at(i) * b.data.at(i);
61 for (std::size_t i = 0; i < N; i++)
67 for (std::size_t i = 0; i < N; i++)
74 for (std::size_t i = 0; i < N; i++)
81 for (std::size_t i = 0; i < N; i++) v.
data.at(i) = -
data.at(i);
87 for (std::size_t i = 0; i < N; i++) v.
data.at(i) =
data.at(i) / scalar;
96 return !(*
this == other);
99 [[nodiscard]]
constexpr auto length()
const {
101 for (
const auto& d :
data) sum += d * d;
102 return std::sqrt(sum);
115 [[nodiscard]]
auto x()
const {
return data.at(0); }
116 [[nodiscard]]
auto y()
const {
return data.at(1); }
124 [[nodiscard]]
auto x()
const {
return data.at(0); }
125 [[nodiscard]]
auto y()
const {
return data.at(1); }
130 Vec3f(
float scalar):
Vec<float, 3> ({scalar, scalar, scalar}){}
134 [[nodiscard]]
auto x()
const {
return data.at(0); }
136 [[nodiscard]]
auto y()
const {
return data.at(1); }
138 [[nodiscard]]
auto z()
const {
return data.at(2); }
142 return Vec3f{
y() * other.
z() -
z() * other.
y(),
143 z() * other.
x() -
x() * other.
z(),
144 x() * other.
y() -
y() * other.
x()};
152 :
Vec<float, 4>({vec.
x(), vec.
y(), vec.
z(),
w}) {}
156 [[nodiscard]]
auto x()
const {
return data.at(0); }
157 [[nodiscard]]
auto y()
const {
return data.at(1); }
158 [[nodiscard]]
auto z()
const {
return data.at(2); }
159 [[nodiscard]]
auto w()
const {
return data.at(3); }
Definition geometry.hpp:8
Definition vector.hpp:128
auto z(float z)
Definition vector.hpp:139
Vec3f(float scalar)
Definition vector.hpp:130
Vec3f(float x, float y, float z)
Definition vector.hpp:131
auto y() const
Definition vector.hpp:136
Vec3f(const Vec< float, 3 > &other)
Definition vector.hpp:132
Vec3f()
Definition vector.hpp:129
auto z() const
Definition vector.hpp:138
auto x() const
Definition vector.hpp:134
auto x(float x)
Definition vector.hpp:135
auto operator%(const Vec3f &other) const
Definition vector.hpp:141
auto y(float y)
Definition vector.hpp:137
Definition vector.hpp:148
auto z() const
Definition vector.hpp:158
auto x() const
Definition vector.hpp:156
auto w() const
Definition vector.hpp:159
Vec4f(float x, float y, float z, float w)
Definition vector.hpp:150
auto y() const
Definition vector.hpp:157
Vec4f(const Vec< float, 4 > &other)
Definition vector.hpp:153
Vec4f()
Definition vector.hpp:149
Vec4f(std::array< float, 4 > data)
Definition vector.hpp:154
Vec4f(const Vec3f &vec, float w)
Definition vector.hpp:151
Vec(std::array< T, N > data)
Definition vector.hpp:18
constexpr auto operator*=(float scalar) const
Definition vector.hpp:26
constexpr auto operator==(const vec_t &other) const
Definition vector.hpp:91
std::array< T, N > data
Definition vector.hpp:107
constexpr auto length() const
Definition vector.hpp:99
static auto UnitX()
Definition vector.hpp:12
constexpr auto operator*=(const vec_t &other)
Definition vector.hpp:38
constexpr auto operator+=(const vec_t &other)
Definition vector.hpp:60
auto normalized() const
Definition vector.hpp:105
constexpr auto operator-() const
Definition vector.hpp:79
Vec()
Definition vector.hpp:16
constexpr auto operator-(const vec_t &other) const
Definition vector.hpp:72
constexpr auto dot(const vec_t &other) const
Definition vector.hpp:52
auto at(std::size_t i) const
Definition vector.hpp:24
constexpr auto operator*(const vec_t &other) const
Definition vector.hpp:44
static auto UnitY()
Definition vector.hpp:13
constexpr auto operator+(const vec_t &other) const
Definition vector.hpp:65
static auto UnitZ()
Definition vector.hpp:14
auto operator/(float scalar) const
Definition vector.hpp:85
constexpr auto operator*(float scalar) const
Definition vector.hpp:32
auto at(std::size_t i) -> T &
Definition vector.hpp:23
constexpr auto operator!=(const vec_t &other) const
Definition vector.hpp:95
Definition vector.hpp:119
auto y() const
Definition vector.hpp:125
vec2f(float x, float y)
Definition vector.hpp:121
vec2f()
Definition vector.hpp:120
auto x() const
Definition vector.hpp:124
vec2f(const Vec< float, 2 > &other)
Definition vector.hpp:122
Definition vector.hpp:110
vec2i(const Vec< int, 2 > &other)
Definition vector.hpp:113
auto x() const
Definition vector.hpp:115
auto y() const
Definition vector.hpp:116
vec2i(int x, int y)
Definition vector.hpp:112
vec2i()
Definition vector.hpp:111