Not Enough Math
Lightweight zero-dependency C++ math library
Loading...
Searching...
No Matches
vec_utils.hpp File Reference
#include "config.hpp"
#include "utils.hpp"
#include "vec.hpp"
#include "power.hpp"
#include <concepts>

Go to the source code of this file.

Namespaces

namespace  nem
 

Functions

template<typename T , size_t N>
bool nem::is_zero (const nem::vec< T, N > &v)
 
template<typename T , size_t N>
bool nem::is_zero (const nem::vec< T, N > &&v)
 
template<typename T , size_t N>
constexpr nem::vec< T, N > nem::is_infinite (const nem::vec< T, N > &v)
 
template<typename T , size_t N>
constexpr nem::vec< T, N > nem::is_nan (const nem::vec< T, N > &v)
 
template<std::floating_point T, size_t N>
constexpr nem::vec< T, N > nem::copysign (const nem::vec< T, N > &to, const nem::vec< T, N > &from)
 
template<nem::scalar_type T, size_t N>
constexpr nem::vec< T, N > nem::sign (const nem::vec< T, N > &v)
 
template<typename T , size_t N>
constexpr nem::vec< T, N > nem::abs (const nem::vec< T, N > &v)
 
template<nem::scalar_type T, size_t N>
constexpr bool nem::is_zero_or_neg (const nem::vec< T, N > &v)
 
template<nem::scalar_type T, size_t N>
constexpr bool nem::equal (const nem::vec< T, N > &a, const nem::vec< T, N > &b)
 
template<nem::scalar_type T, size_t N>
constexpr nem::vec< T, N > nem::get_max (const nem::vec< T, N > &a, const nem::vec< T, N > &b)
 
template<nem::scalar_type T, size_t N>
constexpr nem::vec< T, N > nem::get_min (const nem::vec< T, N > &a, const nem::vec< T, N > &b)
 
template<nem::scalar_type T, size_t N>
constexpr nem::vec< T, N > nem::average (const nem::vec< T, N > &a, const nem::vec< T, N > &b)
 
template<typename T , size_t N>
constexpr nem::vec< T, N > nem::pow2 (const nem::vec< T, N > &v)
 
template<typename T , size_t N>
constexpr nem::vec< T, N > nem::pow3 (const nem::vec< T, N > &v)
 
template<typename T , size_t N>
constexpr nem::vec< T, N > nem::pow4 (const nem::vec< T, N > &v)
 
template<typename T , size_t N>
constexpr nem::vec< T, N > nem::sqr (const nem::vec< T, N > &v)
 
template<typename T , size_t N>
constexpr nem::vec< T, N > nem::cube (const nem::vec< T, N > &v)
 
template<nem::scalar_type T, size_t N>
constexpr nem::vec< T, N > nem::truncate (const nem::vec< T, N > &v)
 
template<nem::scalar_type T, size_t N>
constexpr nem::vec< T, N > nem::floor (const nem::vec< T, N > &v)
 
template<nem::scalar_type T, size_t N>
constexpr nem::vec< T, N > nem::ceil (const nem::vec< T, N > &v)
 
template<nem::scalar_type T, size_t N>
constexpr nem::vec< T, N > nem::mod (const nem::vec< T, N > &a, const nem::vec< T, N > &b)
 
template<std::floating_point T, size_t N>
constexpr nem::vec< T, N > nem::frac (const nem::vec< T, N > &v)
 
template<std::floating_point T, size_t N>
constexpr nem::vec< T, N > nem::round (const nem::vec< T, N > &v)
 
template<nem::scalar_type T, size_t N>
constexpr nem::vec< T, N > nem::floor (const nem::vec< T, N > &v, const nem::vec< T, N > &step)
 
template<nem::scalar_type T, size_t N>
constexpr nem::vec< T, N > nem::ceil (const nem::vec< T, N > &v, const nem::vec< T, N > &step)
 
template<nem::scalar_type T, size_t N>
constexpr nem::vec< T, N > nem::round (const nem::vec< T, N > &v, const nem::vec< T, N > &step)
 
template<nem::scalar_type T, size_t N>
constexpr nem::vec< T, N > nem::repeat (const nem::vec< T, N > &value, const nem::vec< T, N > &lengthExcl)
 
template<nem::scalar_type T, size_t N>
constexpr nem::vec< T, N > nem::repeat (const nem::vec< T, N > &value, const nem::vec< T, N > &minIncl, const nem::vec< T, N > &maxExcl)
 
template<nem::scalar_type T, size_t N>
constexpr nem::vec< T, N > nem::pingpong (const nem::vec< T, N > &value, const nem::vec< T, N > &length)
 
template<nem::scalar_type T, size_t N>
constexpr nem::vec< T, N > nem::pingpong (const nem::vec< T, N > &value, const nem::vec< T, N > &minIncl, const nem::vec< T, N > &maxExcl)
 
template<std::totally_ordered T, size_t N>
constexpr nem::vec< T, N > nem::clamp (const nem::vec< T, N > &value, const nem::vec< T, N > &minIncl, const nem::vec< T, N > &maxIncl)
 
template<std::totally_ordered T, size_t N>
constexpr nem::vec< T, N > nem::clamp01 (const nem::vec< T, N > &value)
 
template<typename T , size_t N>
constexpr nem::vec< T, N > nem::smoothstep (const nem::vec< T, N > &edge0, const nem::vec< T, N > &edge1, const nem::vec< T, N > &x)
 
template<nem::scalar_type T, size_t N>
constexpr nem::vec< T, N > nem::remap (const nem::vec< T, N > &value, const nem::vec< T, N > &fromMin, const nem::vec< T, N > &fromMax, const nem::vec< T, N > &toMin, const nem::vec< T, N > &toMax)
 
template<nem::scalar_type T, size_t N>
constexpr nem::vec< T, N > nem::is_whole (const nem::vec< T, N > &v)
 
template<typename T , size_t N>
nem::dot (const nem::vec< T, N > &a, const nem::vec< T, N > &b)
 
template<typename T >
nem::vec< T, 3 > nem::cross (const nem::vec< T, 3 > &a, const nem::vec< T, 3 > &b)
 
template<typename T , size_t N>
nem::horizontal_sum (const nem::vec< T, N > &v)
 
template<typename T , size_t N>
nem::horizontal_mul (const nem::vec< T, N > &v)
 
template<typename T , size_t N>
nem::vec< T, N > nem::reflect (const nem::vec< T, N > &vector, const nem::vec< T, N > &normal)
 
template<typename T , size_t N>
static constexpr nem::vec< T, N > nem::lerp (const nem::vec< T, N > &a, const nem::vec< T, N > &b, float t)
 
template<typename T , size_t N>
constexpr T nem::sqr_length (const nem::vec< T, N > &vec)
 
template<typename T , size_t N>
nem::length (const nem::vec< T, N > &vec)
 
template<typename T , size_t N>
nem::vec< T, N > nem::normalize (const nem::vec< T, N > &vec)
 
template<typename T >
bool nem::orthogonal_3d_basis (const nem::vec< T, 3 > &vector, nem::vec< T, 3 > &b1, nem::vec< T, 3 > &b2)