迭代CGAL多边形的顶点并获得int坐标

时间:2018-03-19 21:57:46

标签: c++ iterator cgal vertex

我的第一个问题是,顶点迭代器和点在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();
        ^   ~~~~~~~~~

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

你可以写int x = CGAL::to_double((*vi).x()); 然后你仍然得到一个转换警告。你有意使用CGAL::Exact_predicates_exact_constructions_kernel吗?