From a7c25006e06fbd5d5e40564945d07ca736a5903e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Fri, 16 Feb 2024 12:00:58 +0100 Subject: [PATCH] Add some clamping --- .../Isosurfacing_3/interpolation_schemes_3.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Isosurfacing_3/include/CGAL/Isosurfacing_3/interpolation_schemes_3.h b/Isosurfacing_3/include/CGAL/Isosurfacing_3/interpolation_schemes_3.h index 883a5738632..d1236311dc6 100644 --- a/Isosurfacing_3/include/CGAL/Isosurfacing_3/interpolation_schemes_3.h +++ b/Isosurfacing_3/include/CGAL/Isosurfacing_3/interpolation_schemes_3.h @@ -81,14 +81,14 @@ public: --k; // calculate coordinates of min index - const FT min_x = i * spacing[0] + x_coord(min_p); - const FT min_y = j * spacing[1] + y_coord(min_p); - const FT min_z = k * spacing[2] + z_coord(min_p); + const FT min_x = x_coord(min_p) + i * spacing[0]; + const FT min_y = y_coord(min_p) + j * spacing[1]; + const FT min_z = z_coord(min_p) + k * spacing[2]; // interpolation factors between 0 and 1 - const FT f_i = (x_coord(p) - min_x) / spacing[0]; - const FT f_j = (y_coord(p) - min_y) / spacing[1]; - const FT f_k = (z_coord(p) - min_z) / spacing[2]; + const FT f_i = std::clamp((x_coord(p) - min_x) / spacing[0], 0, 1); + const FT f_j = std::clamp((y_coord(p) - min_y) / spacing[1], 0, 1); + const FT f_k = std::clamp((z_coord(p) - min_z) / spacing[2], 0, 1); // read the value at all 8 corner points const FT g000 = values[g.linear_index(i + 0, j + 0, k + 0)]; @@ -159,9 +159,9 @@ public: const FT min_z = k * spacing[2] + z_coord(min_p); // interpolation factors between 0 and 1 - const FT f_i = (x_coord(p) - min_x) / spacing[0]; - const FT f_j = (y_coord(p) - min_y) / spacing[1]; - const FT f_k = (z_coord(p) - min_z) / spacing[2]; + const FT f_i = std::clamp((x_coord(p) - min_x) / spacing[0], 0, 1); + const FT f_j = std::clamp((y_coord(p) - min_y) / spacing[1], 0, 1); + const FT f_k = std::clamp((z_coord(p) - min_z) / spacing[2], 0, 1); // read the value at all 8 corner points const Vector_3& g000 = gradients[g.linear_index(i + 0, j + 0, k + 0)];