For loop 如何在VTK中迭代点,同时查找每个点的最近邻?
我正在使用VTK进行一个项目,但似乎无法理解其中的一部分。我试着遍历数千个点,并找到每个点最近的5个点。似乎是一个简单的for循环操作,但我的问题是,出于某种原因,我被告知相同的5个点是我数据中每个点的最近点…我知道这不是真的。我将附上下面描述的代码位:For loop 如何在VTK中迭代点,同时查找每个点的最近邻?,for-loop,iterator,vtk,For Loop,Iterator,Vtk,我正在使用VTK进行一个项目,但似乎无法理解其中的一部分。我试着遍历数千个点,并找到每个点最近的5个点。似乎是一个简单的for循环操作,但我的问题是,出于某种原因,我被告知相同的5个点是我数据中每个点的最近点…我知道这不是真的。我将附上下面描述的代码位: //test vtkSmartPointer<vtkPointSource> pointSource = vtkSmartPointer<vtkPointSource>::New(); pointS
//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
//测试
VTKSmartPointSource=
vtkSmartPointer::New();
pointSource->SetNumberOfPoints(输出->GetNumberOfPoints());
点源->更新();
VTKSmart指针树=
vtkSmartPointer::New();
Tree->SetDataSet(pointSource->GetOutput());
树->构建定位器();
无符号整数k=5;
双测试点[3];
vtkSmartPointer结果=
vtkSmartPointer::New();
对于(vtkIdType n=0;nGetNumberOfPoints();n++)
{
结果->重置();
输出->获取点(n,测试点);
树->更新();
std::cout我发现了问题…我使用/vtkPointSource生成随机点,并将我的点输入该函数。我不确定原因,但这使得获得结果非常困难,但一旦我输入了正确的信息并进行了重置()在点Id数组和结果Id数组上,它像champ一样工作。希望这会给其他人带来一些麻烦,因为我花了一些时间在这方面
卢克H
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();
}
vtksmart指针树=
vtkSmartPointer::New();
树->设置数据集(输出);
树->构建定位器();
vtkSmartPointer结果=
vtkSmartPointer::New();
VTKSmart指针指向=
vtkSmartPointer::New();
无符号整数k=5;
双测试点[3];
对于(vtkIdType n=0;nGetNumberOfPoints();n++)
{
输出->获取点(n,测试点);
标准::cout