Обойти вершины многоугольника CGAL и получить целые координаты

Моя первая проблема заключается в том, что итераторы вершин и точки «неизвестны» в CLION. Когда я объявляю точку и хочу получить доступ к ее функциям-членам, автозаполнение не выполняется (в отличие от многоугольников и т. Д.).

Мой второй вопрос: как я могу перебирать вершины многоугольника и получать координаты вершин в виде значений типа int?

Идея заключалась в следующем, но тип возвращаемого значения p.x () не является int или double.

#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
#include <CGAL/Polygon_2.h>

typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel;
typedef Kernel::Point_2 Point;
typedef CGAL::Polygon_2<Kernel> Polygon_2;

int main() {
    std::vector<Point> points;

    points.emplace_back(Point(10, 10));
    points.emplace_back(Point(20, 10));
    points.emplace_back(Point(20, 20));
    points.emplace_back(Point(10, 20));

    Polygon_2 poly(points.begin(), points.end());

    for (auto vi = poly.vertices_begin(); vi != poly.vertices_end(); ++vi)
    {
        int x = (*vi).x();
        int y = (*vi).y();
    }

    return 0;
}

Ошибка компилятора:

main.cpp:20:13: error: no viable conversion from 'typename cpp11::result_of<typename R::Compute_x_2 (Point_2<Epeck>)>::type' (aka 'Lazy_exact_nt<CGAL::Gmpq>') to 'int'
    int x = (*vi).x();
        ^   ~~~~~~~~~

Спасибо за помощь!


person Yannic    schedule 19.03.2018    source источник


Ответы (1)


Вы можете написать int x = CGAL::to_double((*vi).x());. Тогда вы все равно получите предупреждение о преобразовании. Вы намеренно используете CGAL::Exact_predicates_exact_constructions_kernel?

person Andreas Fabri    schedule 20.03.2018
comment
Нет, я взял только из примера CGAL. Есть ли лучшая альтернатива? - person Yannic; 20.03.2018