mirror of
https://github.com/BlackMATov/vmath.hpp.git
synced 2025-12-15 04:35:25 +07:00
saturate function
This commit is contained in:
@@ -95,6 +95,11 @@ namespace vmath_hpp
|
||||
return min(max(x, min_x), max_x);
|
||||
}
|
||||
|
||||
template < typename T >
|
||||
constexpr T saturate(T x) noexcept {
|
||||
return clamp(x, T(0), T(1));
|
||||
}
|
||||
|
||||
template < typename T >
|
||||
constexpr T mix(T x, T y, T a) noexcept {
|
||||
return x * (T(1) - a) + y * a;
|
||||
|
||||
@@ -456,6 +456,11 @@ namespace vmath_hpp
|
||||
return zip([](T x, T min_x, T max_x) { return clamp(x, min_x, max_x); }, xs, min_xs, max_xs);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
constexpr vec<T, Size> saturate(const vec<T, Size>& xs) {
|
||||
return map([](T x) { return saturate(x); }, xs);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
constexpr vec<T, Size> mix(const vec<T, Size>& xs, const vec<T, Size>& ys, T a) {
|
||||
return zip([a](T x, T y) { return mix(x, y, a); }, xs, ys);
|
||||
|
||||
@@ -86,6 +86,10 @@ TEST_CASE("vmath/fun") {
|
||||
STATIC_REQUIRE(clamp(2.5f, 2.f, 3.f) == approx(2.5f));
|
||||
STATIC_REQUIRE(clamp(3.5f, 2.f, 3.f) == approx(3.0f));
|
||||
|
||||
STATIC_REQUIRE(saturate(-0.5f) == approx(0.f));
|
||||
STATIC_REQUIRE(saturate(0.5f) == approx(0.5f));
|
||||
STATIC_REQUIRE(saturate(1.5f) == approx(1.f));
|
||||
|
||||
STATIC_REQUIRE(mix(0.f, 10.f, 0.5f) == approx(5.f));
|
||||
STATIC_REQUIRE(mix(0.f, 10.f, false) == approx(0.f));
|
||||
STATIC_REQUIRE(mix(0.f, 10.f, true) == approx(10.f));
|
||||
|
||||
@@ -126,6 +126,8 @@ TEST_CASE("vmath/vec_fun") {
|
||||
STATIC_REQUIRE(clamp(vec2i(1,2), 0, 1) == vec2i(1,1));
|
||||
STATIC_REQUIRE(clamp(vec2i(1,2), vec2i(0), vec2i(1)) == vec2i(1,1));
|
||||
|
||||
STATIC_REQUIRE(saturate(vec3f(-1.f,0.5,1.5f)) == approx3(0.f,0.5f,1.f));
|
||||
|
||||
STATIC_REQUIRE(mix(vec2f(0.f), vec2f(10.f), 0.5f) == approx2(5.f));
|
||||
STATIC_REQUIRE(mix(vec2f(0.f), vec2f(10.f), vec2f(0.5f)) == approx2(5.f));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user