Lin*_*les 3 iterator for-loop vtk
我在一个项目中使用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
Run Code Online (Sandbox Code Playgroud)
这是我正在尝试做的事情...正在打印出5个最接近的兴趣点,但是尽管兴趣点发生了变化,但5个最接近的点仍保持不变。我假设我只是在代码中传递了一个小细节,但我可能是错的。如果您需要其他信息以帮助您,请离开。
谢谢您的时间和帮助,卢克·H
我发现了问题...我正在使用/ vtkPointSource生成随机点,并且将我的点输入该函数。我不知道为什么,但是这使得获取结果非常困难,但是一旦我输入了正确的信息并将Reset()放置在点ID数组和结果ID数组上,它就可以像冠军一样工作。希望这会给其他人带来麻烦,因为我花了一些时间来解决这个问题。
路加
vtkSmartPointer<vtkKdTreePointLocator> Tree =
vtkSmartPointer<vtkKdTreePointLocator>::New();
Tree->SetDataSet( Output );
Tree->BuildLocator();
vtkSmartPointer<vtkIdList> result =
vtkSmartPointer<vtkIdList>::New();
vtkSmartPointer<vtkIdList> point_ind =
vtkSmartPointer<vtkIdList>::New();
unsigned int k = 5;
double testpoint[3];
for( vtkIdType n = 0; n < Output->GetNumberOfPoints(); n++ )
{
Output->GetPoint( n,testpoint );
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];
Output->GetPoint( point_ind, p );
std::cout << "Closest point " << i+1 << ": Point "
<< point_ind << ": (" << p[0] << ", " << p[1] << ", "
<< p[2] << ")" << std::endl;
}
result->Reset();
point_ind->Reset();
}
Run Code Online (Sandbox Code Playgroud)