11 template<
typename T,
size_t N>
14 for (
size_t c = 0; c < N; ++c)
24 template<
typename T,
size_t N>
27 for (
size_t c = 0; c < N; ++c)
41 template<
typename T,
size_t N>
45 for (
size_t i = 0; i < N; ++i)
52 template<
typename T,
size_t N>
56 for (
size_t i = 0; i < N; ++i)
67 template<std::
floating_po
int T,
size_t N>
71 for (
size_t i = 0; i < N; ++i)
78 template<nem::scalar_type T,
size_t N>
82 for (
size_t i = 0; i < N; ++i)
89 template<
typename T,
size_t N>
93 for (
size_t i = 0; i < N; ++i)
104 template<nem::scalar_type T,
size_t N>
107 for (
size_t i = 0; i < N; ++i)
117 template<nem::scalar_type T,
size_t N>
120 for (
size_t i = 0; i < N; ++i)
130 template<nem::scalar_type T,
size_t N>
134 for (
size_t i = 0; i < N; ++i)
141 template<nem::scalar_type T,
size_t N>
145 for (
size_t i = 0; i < N; ++i)
152 template<nem::scalar_type T,
size_t N>
156 for (
size_t i = 0; i < N; ++i)
167 template<
typename T,
size_t N>
171 for (
size_t i = 0; i < N; ++i)
178 template<
typename T,
size_t N>
182 for (
size_t i = 0; i < N; ++i)
189 template<
typename T,
size_t N>
193 for (
size_t i = 0; i < N; ++i)
200 template<
typename T,
size_t N>
204 for (
size_t i = 0; i < N; ++i)
211 template<
typename T,
size_t N>
215 for (
size_t i = 0; i < N; ++i)
226 template<nem::scalar_type T,
size_t N>
230 for (
size_t i = 0; i < N; ++i)
237 template<nem::scalar_type T,
size_t N>
241 for (
size_t i = 0; i < N; ++i)
248 template<nem::scalar_type T,
size_t N>
252 for (
size_t i = 0; i < N; ++i)
259 template<nem::scalar_type T,
size_t N>
263 for (
size_t i = 0; i < N; ++i)
270 template<std::
floating_po
int T,
size_t N>
274 for (
size_t i = 0; i < N; ++i)
281 template<std::
floating_po
int T,
size_t N>
285 for (
size_t i = 0; i < N; ++i)
296 template<nem::scalar_type T,
size_t N>
300 for (
size_t i = 0; i < N; ++i)
307 template<nem::scalar_type T,
size_t N>
311 for (
size_t i = 0; i < N; ++i)
318 template<nem::scalar_type T,
size_t N>
322 for (
size_t i = 0; i < N; ++i)
333 template<nem::scalar_type T,
size_t N>
337 for (
size_t i = 0; i < N; ++i)
344 template<nem::scalar_type T,
size_t N>
348 for (
size_t i = 0; i < N; ++i)
350 result[i] =
nem::repeat(value[i], minIncl[i], maxExcl[i]);
355 template<nem::scalar_type T,
size_t N>
359 for (
size_t i = 0; i < N; ++i)
366 template<nem::scalar_type T,
size_t N>
370 for (
size_t i = 0; i < N; ++i)
377 template<std::totally_ordered T,
size_t N>
381 for (
size_t i = 0; i < N; ++i)
383 result[i] =
nem::clamp(value[i], minIncl[i], maxIncl[i]);
388 template<std::totally_ordered T,
size_t N>
392 for (
size_t i = 0; i < N; ++i)
403 template<
typename T,
size_t N>
407 for (
size_t i = 0; i < N; ++i)
418 template<nem::scalar_type T,
size_t N>
423 for (
size_t i = 0; i < N; ++i)
425 result[i] =
nem::remap(value[i], fromMin[i], fromMax[i], toMin[i], toMax[i]);
434 template<nem::scalar_type T,
size_t N>
438 for (
size_t i = 0; i < N; ++i)
445 template<
typename T,
size_t N>
449 for (
size_t c = 0; c < N; ++c)
451 result += a[c] * b[c];
456 template <
typename T>
460 a.y * b.z - a.z * b.y,
461 a.z * b.x - a.x * b.z,
462 a.x * b.y - a.y * b.x
466 template<
typename T,
size_t N>
470 for (
size_t c = 0; c < N; ++c)
477 template<
typename T,
size_t N>
481 for (
size_t c = 0; c < N; ++c)
488 template<
typename T,
size_t N>
491 return vector - (T)2.0 *
nem::dot(vector, normal) * normal;
494 template<
typename T,
size_t N>
498 for (
size_t i = 0; i < N; ++i)
505 template<
typename T,
size_t N>
509 for (
size_t i = 0; i < N; ++i)
516 template<
typename T,
size_t N>
522 template<
typename T,
size_t N>
533 if constexpr (std::is_floating_point_v<T>)
535 const T fac = (T)1.0 / len;
536 for (
size_t i = 0; i < N; ++i)
538 result[i] =
vec[i] * fac;
543 for (
size_t i = 0; i < N; ++i)
545 result[i] =
vec[i] / len;
T invalid_result(nem::error::Kind kind=Kind::RuntimeError, const char *const msg=nullptr)
void report_invalid(nem::error::Kind kind=Kind::RuntimeError, const char *const msg=nullptr)
nem::quat_t< T > normalize(nem::quat_t< T > q)
constexpr T smoothstep(T edge0, T edge1, T x)
constexpr T floor(T value) noexcept
Floors always towards -infinity.
constexpr T get_max(T a, T b) noexcept
constexpr T get_min(T a, T b) noexcept
T horizontal_sum(const nem::vec< T, N > &v)
constexpr T mod(T a, T b)
Calculates euclidean modulo of a % b = r, where r belongs to [0, b). Unline standard C++ modulo opera...
nem::vec< T, 3 > cross(const nem::vec< T, 3 > &a, const nem::vec< T, 3 > &b)
constexpr T ceil(T value) noexcept
Ceils always towards +infinity.
T dot(const nem::vec< T, N > &a, const nem::vec< T, N > &b)
bool orthogonal_3d_basis(const nem::vec< T, 3 > &vector, nem::vec< T, 3 > &b1, nem::vec< T, 3 > &b2)
constexpr T repeat(T value, T lengthExcl)
Unwinds number to 0 when goes past length. Lengh is excluded: when value == lengthExcl,...
constexpr T remap(T value, T fromMin, T fromMax, T toMin, T toMax)
constexpr T is_nan(T value) noexcept
constexpr T sign(T value) noexcept
constexpr T abs(T value) noexcept
constexpr bool is_zero(T a) noexcept
Is a nearly 0? Given an Epsilon > 0, within each all numbers are considered indistinguisable from 0,...
constexpr T pow3(T value) noexcept
constexpr T pow4(T value) noexcept
constexpr bool is_zero_or_neg(T a) noexcept
constexpr T frac(T value) noexcept
Returns the fractional part of the floating-point number, with respect to sign 3.5 -> 0....
constexpr T pow2(T value) noexcept
T horizontal_mul(const nem::vec< T, N > &v)
constexpr T round(T value) noexcept
constexpr T sqr_length(const nem::quat_t< T > &q)
constexpr T pingpong(T value, T length)
constexpr T is_infinite(T value) noexcept
constexpr T copysign(T to, T from) noexcept
Copies the sign of {from} over to {to}. If the signs were the same, it doesn't change.
constexpr T clamp01(T value) noexcept
constexpr T truncate(T value) noexcept
constexpr T sqr(T value) noexcept
constexpr bool equal(T a, T b) noexcept
Are a and b nearly equal? Given an Epsilon > 0, within each all numbers are considered indistinguisab...
T length(const nem::quat_t< T > &q)
constexpr T lerp(T a, T b, T t)
constexpr T clamp(T value, T minIncl, T maxIncl) noexcept
nem::vec< T, N > reflect(const nem::vec< T, N > &vector, const nem::vec< T, N > &normal)
constexpr T cube(T value) noexcept
constexpr T is_whole(T value)
Is a floating point number whole (same as integer)
constexpr T average(T a, T b) noexcept