나노 플라워 radiusSearch
기능의 매개 변수 search_radius
에 대해 의문의 여지가 있습니다. 내 코드는 다음과 같습니다Nanoflann 반경 검색
#include <iostream>
#include <vector>
#include <map>
#include "nanoflann.hpp"
#include "Eigen/Dense"
int main()
{
Eigen::MatrixXf mat(7, 2);
mat(0,0) = 0.0; mat(0,1) = 0.0;
mat(1,0) = 0.1; mat(1,1) = 0.0;
mat(2,0) = -0.1; mat(2,1) = 0.0;
mat(3,0) = 0.2; mat(3,1) = 0.0;
mat(4,0) = -0.2; mat(4,1) = 0.0;
mat(5,0) = 0.5; mat(5,1) = 0.0;
mat(6,0) = -0.5; mat(6,1) = 0.0;
std::vector<float> query_pt(2);
query_pt[0] = 0.0;
query_pt[1] = 0.0;
typedef nanoflann::KDTreeEigenMatrixAdaptor<Eigen::MatrixXf> KDTree;
KDTree index(2, mat, 10);
index.index->buildIndex();
{ // Find nearest neighbors in radius
const float search_radius = 0.1f;
std::vector<std::pair<size_t, float> > matches;
nanoflann::SearchParams params;
const size_t nMatches = index.index->radiusSearch(&query_pt[0], search_radius, matches, params);
std::cout << "RadiusSearch(): radius = " << search_radius << " -> "
<< nMatches << " matches" << std::endl;
for(size_t i = 0; i < nMatches; i++)
std::cout << "Idx[" << i << "] = " << matches[i].first
<< " dist[" << i << "] = " << matches[i].second << std::endl;
std::cout << std::endl;
}
}
내가 원하는 것은 내가 매트릭스 그러나 놀랍게도 처음 세 요소는 처음 5를 반환 기대했던, 0.1의 반경 내에서 포인트를 가지고, 그래서 집단. 거리를 확인하는 것은 그것이 실제 거리가 아니라 거리 제곱 (오른쪽?) 인 것처럼 보입니다. 그래서 나는 예상했던 것을 얻기 위해 반경을 제곱했으나 불행히도 첫 번째 점만 리턴합니다.
는 그래서 0.02에 0.1^2 = 0.01로부터 약간 반경을 증가 마지막 I가 원하는 지점을 얻었다.이제 이웃 경계에 포함되는 점들이 포함되어서는 안된다는 것이 문제입니다. nanoflann에서이 조건을 어디에서 변경할 수 있습니까?
아주 자세히 설명해 주셔서 감사합니다. 부동 소수점 산술에 대한 저서를 꼭 읽어야합니다. 또 하나의 질문은 L2_Norm이 sqrt (도트 (v, v))로 정의되지 않은 것입니다 ... 그들은 나노 플라 만의 점 (v, v)으로 유지했을 것입니다. 맞습니까? – BRabbit27
@ BRabbit27 예, 그 이름은 오해의 소지가 있습니다. – BartoszKP