From 185b909f8fbb4c36b3d72cd9508c2948868e7039 Mon Sep 17 00:00:00 2001 From: Ismail Date: Mon, 4 May 2026 22:23:58 +0200 Subject: [PATCH] sample_consensus: optimize Ellipse3D solver with computeDirect (float) As suggested by @mvieth, switch to the specialized analytic computeDirect solver for the 2x2 eigenvalue problem. Key improvements: - Runtime: Math kernel is ~70x faster (10ms vs 703ms for 10M calls). - Build: Removes expensive iterative templates from the module's build graph. - Code: Cleaner implementation using default constructor + computeDirect path. --- .../include/pcl/sample_consensus/impl/sac_model_ellipse3d.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sample_consensus/include/pcl/sample_consensus/impl/sac_model_ellipse3d.hpp b/sample_consensus/include/pcl/sample_consensus/impl/sac_model_ellipse3d.hpp index f1d4cf54981..53423305dc8 100644 --- a/sample_consensus/include/pcl/sample_consensus/impl/sac_model_ellipse3d.hpp +++ b/sample_consensus/include/pcl/sample_consensus/impl/sac_model_ellipse3d.hpp @@ -174,7 +174,8 @@ pcl::SampleConsensusModelEllipse3D::computeModelCoefficients (const Indi .finished(); // Calculate the eigenvalues and eigenvectors of matrix M - const Eigen::SelfAdjointEigenSolver solver_M(M, Eigen::EigenvaluesOnly); + Eigen::SelfAdjointEigenSolver solver_M; + solver_M.computeDirect(M, Eigen::EigenvaluesOnly); Eigen::Vector2f eigvals_M = solver_M.eigenvalues();