From b6ac0a1d612aafb3f15cf7f7348526ac926775d8 Mon Sep 17 00:00:00 2001 From: Orange Date: Sun, 14 Dec 2025 10:26:36 +0300 Subject: [PATCH] decomposed into method --- include/omath/collision/epa_algorithm.hpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/include/omath/collision/epa_algorithm.hpp b/include/omath/collision/epa_algorithm.hpp index a009300..9427f26 100644 --- a/include/omath/collision/epa_algorithm.hpp +++ b/include/omath/collision/epa_algorithm.hpp @@ -45,7 +45,6 @@ namespace omath::collision int max_iterations{64}; float tolerance{1e-4f}; // absolute tolerance on distance growth }; - // Precondition: simplex.size()==4 and contains the origin. [[nodiscard]] static std::optional solve(const ColliderInterfaceType& a, const ColliderInterfaceType& b, @@ -59,12 +58,7 @@ namespace omath::collision vertexes.emplace_back(simplex[i]); // Initial tetra faces (windings corrected in make_face) - std::pmr::vector faces{&mem_resource}; - faces.reserve(4); - faces.emplace_back(make_face(vertexes, 0, 1, 2)); - faces.emplace_back(make_face(vertexes, 0, 2, 3)); - faces.emplace_back(make_face(vertexes, 0, 3, 1)); - faces.emplace_back(make_face(vertexes, 1, 3, 2)); + std::pmr::vector faces = create_initial_tetra_faces(mem_resource, vertexes); auto heap = rebuild_heap(faces, mem_resource); @@ -272,5 +266,16 @@ namespace omath::collision return d; return V{1, 0, 0}; } + static std::pmr::vector create_initial_tetra_faces(std::pmr::memory_resource& mem_resource, + const std::pmr::vector& vertexes) + { + std::pmr::vector faces{&mem_resource}; + faces.reserve(4); + faces.emplace_back(make_face(vertexes, 0, 1, 2)); + faces.emplace_back(make_face(vertexes, 0, 2, 3)); + faces.emplace_back(make_face(vertexes, 0, 3, 1)); + faces.emplace_back(make_face(vertexes, 1, 3, 2)); + return faces; + } }; } // namespace omath::collision