lerp instead mix

This commit is contained in:
BlackMATov
2020-11-25 18:55:41 +07:00
parent e589c03c53
commit 8dd4ccc08b
4 changed files with 8 additions and 31 deletions

View File

@@ -101,15 +101,10 @@ namespace vmath_hpp
} }
template < typename T > template < typename T >
constexpr T mix(T x, T y, T a) noexcept { constexpr T lerp(T x, T y, T a) noexcept {
return x * (T(1) - a) + y * a; return x * (T(1) - a) + y * a;
} }
template < typename T >
constexpr T mix(T x, T y, bool a) noexcept {
return a ? y : x;
}
template < typename T > template < typename T >
constexpr T step(T edge, T x) noexcept { constexpr T step(T edge, T x) noexcept {
return x < edge ? T(0) : T(1); return x < edge ? T(0) : T(1);

View File

@@ -462,23 +462,13 @@ namespace vmath_hpp
} }
template < typename T, std::size_t Size > template < typename T, std::size_t Size >
constexpr vec<T, Size> mix(const vec<T, Size>& xs, const vec<T, Size>& ys, T a) { constexpr vec<T, Size> lerp(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); return zip([a](T x, T y) { return lerp(x, y, a); }, xs, ys);
} }
template < typename T, std::size_t Size > template < typename T, std::size_t Size >
constexpr vec<T, Size> mix(const vec<T, Size>& xs, const vec<T, Size>& ys, bool a) { constexpr vec<T, Size> lerp(const vec<T, Size>& xs, const vec<T, Size>& ys, const vec<T, Size>& as) {
return zip([a](T x, T y) { return mix(x, y, a); }, xs, ys); return zip([](T x, T y, T a) { return lerp(x, y, a); }, xs, ys, as);
}
template < typename T, std::size_t Size >
constexpr vec<T, Size> mix(const vec<T, Size>& xs, const vec<T, Size>& ys, const vec<T, Size>& as) {
return zip([](T x, T y, T a) { return mix(x, y, a); }, xs, ys, as);
}
template < typename T, std::size_t Size >
constexpr vec<T, Size> mix(const vec<T, Size>& xs, const vec<T, Size>& ys, const vec<bool, Size>& as) {
return zip([](T x, T y, bool a) { return mix(x, y, a); }, xs, ys, as);
} }
template < typename T, std::size_t Size > template < typename T, std::size_t Size >

View File

@@ -90,9 +90,7 @@ TEST_CASE("vmath/fun") {
STATIC_REQUIRE(saturate(0.5f) == approx(0.5f)); STATIC_REQUIRE(saturate(0.5f) == approx(0.5f));
STATIC_REQUIRE(saturate(1.5f) == approx(1.f)); STATIC_REQUIRE(saturate(1.5f) == approx(1.f));
STATIC_REQUIRE(mix(0.f, 10.f, 0.5f) == approx(5.f)); STATIC_REQUIRE(lerp(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));
STATIC_REQUIRE(step(0.5f, 0.4f) == approx(0.f)); STATIC_REQUIRE(step(0.5f, 0.4f) == approx(0.f));
STATIC_REQUIRE(step(0.5f, 0.6f) == approx(1.f)); STATIC_REQUIRE(step(0.5f, 0.6f) == approx(1.f));
STATIC_REQUIRE(smoothstep(0.f, 1.f, 0.1f) == approx(0.028f)); STATIC_REQUIRE(smoothstep(0.f, 1.f, 0.1f) == approx(0.028f));

View File

@@ -128,14 +128,8 @@ TEST_CASE("vmath/vec_fun") {
STATIC_REQUIRE(saturate(vec3f(-1.f,0.5,1.5f)) == approx3(0.f,0.5f,1.f)); 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(lerp(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)); STATIC_REQUIRE(lerp(vec2f(0.f), vec2f(10.f), vec2f(0.5f)) == approx2(5.f));
STATIC_REQUIRE(mix(vec2f(0.f), vec2f(10.f), true) == approx2(10.f));
STATIC_REQUIRE(mix(vec2f(0.f), vec2f(10.f), false) == approx2(0.f));
STATIC_REQUIRE(mix(vec2f(0.f,5.f), vec2f(10.f,20.f), vec2f(true,false)) == approx2(10.f, 5.f));
STATIC_REQUIRE(mix(vec2f(0.f,5.f), vec2f(10.f,20.f), vec2f(true,false)) == approx2(10.f, 5.f));
STATIC_REQUIRE(step(0.5f, vec2f(0.4f)) == approx2(0.f)); STATIC_REQUIRE(step(0.5f, vec2f(0.4f)) == approx2(0.f));
STATIC_REQUIRE(step(0.5f, vec2f(0.6f)) == approx2(1.f)); STATIC_REQUIRE(step(0.5f, vec2f(0.6f)) == approx2(1.f));