我是CGAL库的新手。并且我想计算Surface_mesh对象的PCA。
CGAL::Surface_mesh<Kernel::Point_3> mesh;
std::ifstream cactus("cat.off");
cactus >> mesh;
正如我在CGAL文档中提到的用于计算PCA的问题一样,here仅讨论了针对一组点或三角形的PCA。
我尝试了下面的代码来适应一行,但是出现了错误:
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Surface_mesh.h>
#include <CGAL/linear_least_squares_fitting_3.h>
#include <iostream>
#include <fstream>
#include <sstream>
typedef double FT;
typedef CGAL::Simple_cartesian<FT> K;
typedef K::Line_3 Line;
typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel;
typedef CGAL::Surface_mesh<Kernel::Point_3> SM;
int main(void)
{
Line line;
SM mesh;
std::ifstream cat("cat.off");
cat >> mesh;
linear_least_squares_fitting_3(mesh.faces_begin(),mesh.faces_end(),line, CGAL::Dimension_tag<0>());
return 0;
}
答案 0 :(得分:0)
传递给linear_least_squares_fitting_3的迭代器的值类型只能是几何内核类型。但是,您可以构造Triangle_3
的向量并将此范围传递给函数,也可以直接将boost's transform iterator与从{{1}构造Triangle_3
的简单结构结合使用}的脸。