From b65af37e7c8e697fb0f1ca858b2c1a35916dc12b Mon Sep 17 00:00:00 2001 From: Guillaume Bittoun Date: Sat, 13 Dec 2014 22:21:51 +0000 Subject: [PATCH] simplex_interpolator: compilation fixes + testing Interp function --- src/lol/math/simplex_interpolator.h | 13 +++++------ src/t/math/simplex_interpolator.cpp | 36 +++++++++++++++++++++-------- 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/src/lol/math/simplex_interpolator.h b/src/lol/math/simplex_interpolator.h index 001d0aae..fff17de9 100644 --- a/src/lol/math/simplex_interpolator.h +++ b/src/lol/math/simplex_interpolator.h @@ -15,8 +15,7 @@ namespace lol { -template /* Interpolated type */ +template class simplex_interpolator { public: @@ -38,7 +37,7 @@ public: } // Single interpolation - inline T Interp(vec_t position) const + inline float Interp(vec_t position) const { // Computing position in simplex referential vec_t simplex_position = m_base_inverse * position; @@ -49,7 +48,7 @@ public: this->ExtractFloorDecimal(simplex_position, floor_point, decimal_point); - vec_t index_order = this->GetIndexOrder(decimal_point); + vec_t index_order = this->GetIndexOrder(decimal_point); // Resetting decimal point in regular orthonormal coordinates decimal_point = m_base * decimal_point; @@ -59,9 +58,9 @@ public: protected: - inline T LastInterp(vec_t const & floor_point, + inline float LastInterp(vec_t & floor_point, vec_t const & decimal_point, - vec_t index_order) const + vec_t index_order) const { vec_t point_of_interest; float result = 0; @@ -83,7 +82,7 @@ protected: return result; } - inline vec_t GetIndexOrder(vec_t const & decimal_point) + inline vec_t GetIndexOrder(vec_t const & decimal_point) const { vec_t result; for (int i = 0 ; i < N ; ++i) diff --git a/src/t/math/simplex_interpolator.cpp b/src/t/math/simplex_interpolator.cpp index 5fddd75a..88d6fbb7 100644 --- a/src/t/math/simplex_interpolator.cpp +++ b/src/t/math/simplex_interpolator.cpp @@ -19,13 +19,13 @@ namespace lol { -template -class test_interpolator : public simplex_interpolator +template +class test_interpolator : public simplex_interpolator { public: test_interpolator() : - simplex_interpolator() + simplex_interpolator() { } @@ -86,7 +86,7 @@ public: vec_t GetIndexOrder(vec_t const & decimal_point) { - return simplex_interpolator::GetIndexOrder(decimal_point); + return simplex_interpolator::GetIndexOrder(decimal_point); } }; @@ -96,12 +96,6 @@ lolunit_declare_fixture(SimplexInterpolatorTest) void TearDown() {} - // lolunit_declare_test(CompoundVariable) - // { - // test_interpolator<2, real> b({{ real(0) }}); - // test_interpolator<2, vec2> c({{ vec2(0) }}); - // } - template void check_base_matrix() { @@ -210,6 +204,28 @@ lolunit_declare_fixture(SimplexInterpolatorTest) check_index_ordering<10>(); } + void check_sample_creation_order2() + { + static int gen = 12345678; + + arraynd<2, vec_t > gradients(vec_t({10, 10})); + for (int i = 0 ; i < 10 ; ++i) + { + for (int j = 0 ; j < 10 ; ++j) + { + float x1 = (gen = gen * gen + gen) % 255; + float x2 = (gen = gen * gen + gen) % 255; + + vec_t v = {x1, x2}; + + gradients[i][j] = v; + } + } + + simplex_interpolator<2> s; + s.SetGradients(gradients); + } + #if 0 lolunit_declare_test(FloatGridPoints2D1x1) {