Есть ли метод для вычисления pca объекта Surface_mesh в CGAL? - PullRequest
1 голос
/ 14 мая 2019

Я новичок в библиотеке CGAL. и я хочу вычислить PCA объекта Surface_mesh.

CGAL::Surface_mesh<Kernel::Point_3> mesh;
std::ifstream cactus("cat.off");
cactus >> mesh;

Как я уже упоминал в документах CGAL для вычисления PCA, обсуждается просто вычисление 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 голосов
/ 15 мая 2019

Тип значения итератора, переданного в linear_least_squares_fitting_3 , может быть только геометрическим типом ядра. Однако вы можете либо создать вектор из Triangle_3 и передать этот диапазон функции, либо напрямую использовать итератор преобразования boost в сочетании с простой структурой, которая создает Triangle_3 из Surface_mesh ' с лицом.

...