私はプロジェクトに VTK を使用していますが、その一部を把握できないようです。数千のポイントを反復処理し、ポイントごとに最も近い 5 つのポイントを見つけようとしています。単純な for ループ操作のように見えますが、私の問題は、何らかの理由で、同じ 5 つのポイントがデータ内のすべてのポイントの最も近いポイントであると言われていることです...これは真実ではありません。以下に説明しているコードの一部を添付します。
//test
vtkSmartPointer<vtkPointSource> pointSource =
vtkSmartPointer<vtkPointSource>::New();
pointSource->SetNumberOfPoints( Output->GetNumberOfPoints() );
pointSource->Update();
vtkSmartPointer<vtkKdTreePointLocator> Tree =
vtkSmartPointer<vtkKdTreePointLocator>::New();
Tree->SetDataSet( pointSource->GetOutput() );
Tree->BuildLocator();
unsigned int k = 5;
double testpoint[3];
vtkSmartPointer<vtkIdList> result =
vtkSmartPointer<vtkIdList>::New();
for(vtkIdType n = 0; n < Output->GetNumberOfPoints(); n++)
{
result->Reset();
Output->GetPoint( n,testpoint );
Tree->Update();
std::cout << "Point: " << testpoint[0] << ", " << testpoint[1] << ", " << testpoint[2] << ": " << endl;
Tree->FindClosestNPoints(k, testpoint, result);
for(vtkIdType i = 0; i < k; i++)
{
vtkIdType point_ind = result->GetId(i);
double p[3];
pointSource->GetOutput()->GetPoint(point_ind, p);
std::cout << "Closest point " << i+1 << ": Point "
<< point_ind << ": (" << p[0] << ", " << p[1] << ", " << p[2] << ")" << std::endl;
}
}
//end test
これは私がやろうとしていることです...関心のあるポイントに最も近い5つのポイントを出力していますが、関心のあるポイントが変わっても、最も近い5つのポイントは同じままです。私は自分のコードの細部をただ見過ごしているだけだと思っていますが、間違っている可能性があります。役立つ情報がさらに必要な場合は、質問してください。
あなたの時間と助けに感謝します, Luke H