diff --git a/MeshLib/findElementsWithinRadius.cpp b/MeshLib/findElementsWithinRadius.cpp index 9c63a9d55e027594b8e4da0e534ebdc5505f0273..0f6d1d345301cedaa3f5410c8820cdb060bb0ace 100644 --- a/MeshLib/findElementsWithinRadius.cpp +++ b/MeshLib/findElementsWithinRadius.cpp @@ -22,20 +22,21 @@ namespace MeshLib { std::vector<std::size_t> findElementsWithinRadius(Element const& start_element, - double const radius) + double const radius_squared) { // Special case for 0 radius. All other radii will include at least one // neighbor of the start element. - if (radius == 0.) + if (radius_squared == 0.) return {start_element.getID()}; // Returns true if the test node is inside the radius of any of the // element's nodes. - auto node_inside_radius = [&start_element, radius](Node const* test_node) { + auto node_inside_radius = [&start_element, + radius_squared](Node const* test_node) { for (unsigned n = 0; n < start_element.getNumberOfNodes(); ++n) { if (MathLib::sqrDist(*test_node, *start_element.getNode(n)) <= - radius * radius) + radius_squared) return true; } return false; diff --git a/MeshLib/findElementsWithinRadius.h b/MeshLib/findElementsWithinRadius.h index 5e46f423f2e28070ef12195c487848eaba3a290f..603dc31273c1156ddf24da0fd168d271e7a14d45 100644 --- a/MeshLib/findElementsWithinRadius.h +++ b/MeshLib/findElementsWithinRadius.h @@ -31,6 +31,6 @@ namespace MeshLib /// /// \note For radius 0 only the given element's id is returned. std::vector<std::size_t> findElementsWithinRadius(Element const& e, - double const radius); + double const radius_squared); } // namespace MeshLib diff --git a/Tests/MeshLib/TestFindElementsWithinRadius.cpp b/Tests/MeshLib/TestFindElementsWithinRadius.cpp index 2d3d66b7ee6b271f3d893b90a88bf90acc855440..4df943b624bf2c9c553cc0a5a741327487ee733b 100644 --- a/Tests/MeshLib/TestFindElementsWithinRadius.cpp +++ b/Tests/MeshLib/TestFindElementsWithinRadius.cpp @@ -177,11 +177,11 @@ TEST_F(MeshLibFindElementWithinRadius, RandomPositiveRadius2d) double const radius) -> bool { auto const& element = *mesh.getElement(element_id); - auto result = findElementsWithinRadius(element, radius); + auto result = findElementsWithinRadius(element, radius * radius); std::sort(std::begin(result), std::end(result)); - auto const expected_elements = - bruteForceFindElementIdsWithinRadius(mesh, element, radius); + auto const expected_elements = bruteForceFindElementIdsWithinRadius( + mesh, element, radius * radius); return result.size() == expected_elements.size() && std::includes(std::begin(result), std::end(result), @@ -208,7 +208,7 @@ TEST_F(MeshLibFindElementWithinRadius, RandomPositiveRadius3d) double const radius) -> bool { auto const& element = *mesh.getElement(element_id); - auto result = findElementsWithinRadius(element, radius); + auto result = findElementsWithinRadius(element, radius * radius); std::sort(std::begin(result), std::end(result)); auto const expected_elements =