gpt4 book ai didi

for-loop - 如何在找到每个点的最近邻居时迭代 VTK 中的点?

转载 作者:行者123 更新时间:2023-12-01 11:51:02 25 4
gpt4 key购买 nike

我正在为一个项目使用 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 个点保持不变。我假设我只是在我的代码中传递了一个小细节,但我可能是错的。如果您需要更多信息来提供帮助,请提出要求。

感谢您的宝贵时间和帮助,卢克·H

最佳答案

我发现了问题...我正在使用生成随机点的/vtkPointSource,并将我的点输入到该函数中。我不确定为什么,但这使得获得结果变得非常困难,但是一旦我传递了正确的信息并将 Reset() 放在点 Id 数组和结果 Id 数组上,它就会像冠军一样工作。希望这会给其他人带来一些麻烦,因为我花了一些时间在这上面。

卢克·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();

}

关于for-loop - 如何在找到每个点的最近邻居时迭代 VTK 中的点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11403570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com