11 template<
u32 Size,
typename T,
size_t... Values>
14 return ((vector.v[0][Values] * vector.v[0][Values]) + ... + T{});
17 template<
u32 Size,
typename T,
size_t... Values>
18 constexpr auto length2_sequenced(T(&array)[Size], std::index_sequence<Values...>)
noexcept -> T
20 return ((array[Values] * array[Values]) + ... + T{});
28 template<u32 Size,
typename T,
typename U = T>
31 template<u32 Size,
typename T,
typename U = T>
34 template<u32 Size,
typename T,
typename U = T>
37 template<u32 Size,
typename T,
typename U = T>
40 template<u32 Size,
typename T>
43 template<u32 Size,
typename T>
52 template<u32 Size,
typename T>
requires(Size > 1)
55 template<u32 Size,
typename T,
typename U = T>
59 template<u32 Size,
typename T,
typename U>
63 for (
u32 i = 0; i < Size; ++i)
65 result.
v[0][i] = left.v[0][i] + T{ right.v[0][i] };
70 template<u32 Size,
typename T,
typename U>
74 for (
u32 i = 0; i < Size; ++i)
76 result.
v[0][i] = left.v[0][i] - T{ right.v[0][i] };
81 template<u32 Size,
typename T,
typename U>
85 for (
u32 i = 0; i < Size; ++i)
87 result.
v[0][i] = left.v[0][i] * T{ right };
92 template<u32 Size,
typename T,
typename U>
96 for (
u32 i = 0; i < Size; ++i)
98 result.
v[0][i] = left.v[0][i] / T{ right };
103 template<u32 Size,
typename T>
109 template<u32 Size,
typename T>
118 left.v[0][1] * right.v[0][2] - right.v[0][1] * left.v[0][2],
119 left.v[0][2] * right.v[0][0] - right.v[0][2] * left.v[0][0],
120 left.v[0][0] * right.v[0][1] - right.v[0][0] * left.v[0][1],
126 return left.v[0][0] * right.v[0][0] +
127 left.v[0][1] * right.v[0][1] +
128 left.v[0][2] * right.v[0][2];
136 template<u32 Size,
typename T>
requires(Size > 1)
139 if constexpr (Size == 4)
151 f32 const sqrt_inverted = 1.f /
sqrt(square_sum);
152 return mul(value, sqrt_inverted);
155 template<u32 Size,
typename T,
typename U>
159 for (
u32 i = 0; i < Size; ++i)
161 result.
v[0][i] = fn(left.
v[0][i]);
#define ICE_ASSERT_CORE(expression)
Definition assert_core.hxx:43
Definition matrix_operations.hxx:9
constexpr auto length2_sequenced(ice::math::vec< Size, T > vector, std::index_sequence< Values... >) noexcept -> T
Definition vector_operations.hxx:12
Definition algorithm.hxx:8
rad32 rad
Definition angles.hxx:170
constexpr auto mul(U first, Args... args) noexcept
Definition algorithm.hxx:38
constexpr auto apply(vec< Size, T > left, U(*fn)(T) noexcept) noexcept -> vec< Size, U >
Definition vector_operations.hxx:156
constexpr auto div(U first, Args... args) noexcept
Definition algorithm.hxx:46
mat< Size, 1, T > vec
Definition vector.hxx:172
constexpr auto length2(vec< Size, T > left) noexcept -> T
Definition vector_operations.hxx:104
auto atan2(f32 x, f32 y) noexcept -> f32
Definition common.hxx:230
auto normalize(vec< Size, T > value) noexcept -> vec< Size, T >
Definition vector_operations.hxx:137
constexpr auto add(arr_t< Size, T > left, arr_t< Size, U > right) noexcept -> arr_t< Size, T >
Definition array_operations.hxx:71
constexpr auto dot(vec< 3, f32 > left, vec< 3, f32 > right) noexcept -> f32
Definition vector_operations.hxx:124
constexpr auto sqrt(f32 val) noexcept -> f32
Definition common.hxx:93
constexpr auto length(vec< Size, T > left) noexcept -> T
Definition vector_operations.hxx:110
constexpr auto sub(U first, Args... args) noexcept
Definition algorithm.hxx:30
constexpr auto cross(vec< 3, f32 > left, vec< 3, f32 > right) noexcept -> vec< 3, f32 >
Definition vector_operations.hxx:115
std::uint32_t u32
Definition types.hxx:26
float f32
Definition types.hxx:16
T v[count_columns][count_rows]
Definition matrix.hxx:17