From 4735fcbe2db963e070bdc2b22159a83bf4828cfc Mon Sep 17 00:00:00 2001 From: mckay Date: Mon, 20 Oct 2025 19:59:19 +0800 Subject: [PATCH] feat: volume integration based on double integrator_t::calculate --- frontend/src/implicit_surface_network_solver.cpp | 1 + surface_integral/interface/subface_integrator.hpp | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/frontend/src/implicit_surface_network_solver.cpp b/frontend/src/implicit_surface_network_solver.cpp index 90bed93..7578640 100644 --- a/frontend/src/implicit_surface_network_solver.cpp +++ b/frontend/src/implicit_surface_network_solver.cpp @@ -22,6 +22,7 @@ void implicit_network_solver::generate_polymesh(stl_vector_mp& auto integrator = internal::integrator_t(m_blobtree->subfaces, output_parameteric_planes); double area = integrator.calculate(4, internal::area_integrand); + double volume = integrator.calculate(4, internal::volume_integrand); std::cout << "Generated mesh area: " << area << std::endl; diff --git a/surface_integral/interface/subface_integrator.hpp b/surface_integral/interface/subface_integrator.hpp index 96fadd7..8edcb5d 100644 --- a/surface_integral/interface/subface_integrator.hpp +++ b/surface_integral/interface/subface_integrator.hpp @@ -85,5 +85,12 @@ double area_integrand(double u, double v, const Eigen::Vector3d& p, const Eigen: return 1.0; } +// Integrate (1/3) * r ยท n dA over all subfaces +double volume_integrand(double u, double v, const Eigen::Vector3d& p, const Eigen::Vector3d& dU, const Eigen::Vector3d& dV) +{ + Eigen::Vector3d cross = dU.cross(dV); + return (p.dot(cross)) / 3.0; // (1/3) * (x dydz + y dzdx + z dxdy) +}; + } // namespace internal \ No newline at end of file