23 #include <mp2p_icp/Matcher_Planes_Normals.h>
35 for (
const auto& pair : mpl)
38 ASSERTDEB_(pair.this_idx < pcs1.planes.size());
39 ASSERTDEB_(pair.other_idx < pcs2.planes.size());
41 const auto& p1 =
s.pc1.planes[pair.this_idx];
42 const auto& p2 =
s.pc2.planes[pair.other_idx];
44 const mrpt::math::TVector3D n1 = p1.plane.getNormalVector();
45 const mrpt::math::TVector3D n2 = p2.plane.getNormalVector();
48 const double dp = n1.x * n2.x + n1.y * n2.y + n1.z * n2.z;
49 const double n2n_ang = std::acos(dp);
52 if (n2n_ang < p.thresholdPlane2PlaneNormalAng)
55 pairings.paired_pl2pl.emplace_back(p1, p2);
63 if (!p.pt2pl_layer.empty())
65 const auto &m1 =
s.pc1.point_layers.at(
"plane_centroids"),
66 &m2 =
s.pc2.point_layers.at(p.pt2pl_layer);
70 auto& mp =
s.mps.at(p.pt2pl_layer);
72 mp.angularDistPivotPoint =
73 mrpt::math::TPoint3D(
s.currentSolutionasTPose());
76 mrpt::tfest::TMatchingPairList mpl;
77 m1->determineMatching3D(
78 m2.get(),
s.currentSolution mpl, mp,
s.mres[p.pt2pl_layer]);
83 for (
const auto& pair : mpl)
86 ASSERTDEB_(pair.this_idx < pcs1.planes.size());
87 ASSERTDEB_(pair.other_idx < m2->size());
89 const auto& pl_this =
s.pc1.planes[pair.this_idx];
90 mrpt::math::TPoint3Df pt_other;
91 m2->getPoint(pair.other_idx, pt_other.x, pt_other.y, pt_other.z);
95 pairings.paired_pt2pl.emplace_back(pl_this, pt_other);
98 out.potential_pairings += pcLocal.size() * maxPt2PtCorrespondences;