有没有一种方法可以计算CGAL中Surface_mesh对象的pca?

时间:2019-05-14 14:14:21

标签: c++ cgal

我是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;
}

1 个答案:

答案 0 :(得分:0)

传递给linear_least_squares_fitting_3的迭代器的值类型只能是几何内核类型。但是,您可以构造Triangle_3的向量并将此范围传递给函数,也可以直接将boost's transform iterator与从{{1}构造Triangle_3的简单结构结合使用}的脸。