in IsometricPatternMatcher/HexGridFitting.cpp [700:728]
bool HexGridFitting::neighboursIdxInArea(const Eigen::Matrix2Xd& dotMatrix,
const Eigen::Vector2d& center,
double searchRadius,
Eigen::VectorXi& result) {
bool flag = false;
std::vector<std::pair<double, int>> distanceIndxPair;
Eigen::VectorXd distance =
((dotMatrix.row(0) -
Eigen::MatrixXd::Constant(1, dotMatrix.cols(), center(0)))
.cwiseAbs2() +
(dotMatrix.row(1) -
Eigen::MatrixXd::Constant(1, dotMatrix.cols(), center(1)))
.cwiseAbs2())
.cwiseSqrt();
for (int i = 0; i < dotMatrix.cols(); ++i) {
if (distance(i) < searchRadius) {
distanceIndxPair.push_back(std::make_pair(distance(i), i));
flag = true;
}
}
if (flag) {
result.resize(distanceIndxPair.size(), 1);
sort(distanceIndxPair.begin(), distanceIndxPair.end());
for (size_t i = 0; i < distanceIndxPair.size(); ++i) {
result(i) = distanceIndxPair[i].second;
}
}
return flag;
}