本文整理汇总了C++中PCA::doPCA方法的典型用法代码示例。如果您正苦于以下问题:C++ PCA::doPCA方法的具体用法?C++ PCA::doPCA怎么用?C++ PCA::doPCA使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PCA
的用法示例。
在下文中一共展示了PCA::doPCA方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: estimateNormals
void PCANormalEstimator::estimateNormals(vtkPolyData* data, double neighRadius)
{
vtkPointLocator* locator = vtkPointLocator::New();
locator->SetDataSet(data);
locator->BuildLocator();
int i, numOfPoints = data->GetNumberOfPoints();
vtkDoubleArray* normals = vtkDoubleArray::New();
normals->SetNumberOfComponents(3);
normals->SetNumberOfTuples(numOfPoints);
PCA pca;
double p[3], com[3], eigenvals[3], eigenvecs[3][3];
vtkPoints* points = data->GetPoints();
vtkIdList* neighs = vtkIdList::New();
for ( i = 0 ; i < numOfPoints ; ++i )
{
points->GetPoint(i, p);
neighs->Reset();
locator->FindPointsWithinRadius(neighRadius, p, neighs);
if ( neighs->GetNumberOfIds() < 3 )
{
normals->SetTuple3(i, 0.0, 0.0, 0.0);
continue;
}
// Perform PCA
pca.doPCA(points, neighs, eigenvecs, eigenvals, com);
// Save the normal
normals->SetTuple3(i, eigenvecs[0][2], eigenvecs[1][2], eigenvecs[2][2]);
}
data->GetPointData()->SetNormals(normals);
// Clean up
locator->Delete();
normals->Delete();
neighs->Delete();
}