我的第一个问题是,顶点迭代器和点在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();
^ ~~~~~~~~~
感谢您的帮助!
答案 0 :(得分:0)
你可以写int x = CGAL::to_double((*vi).x());
然后你仍然得到一个转换警告。你有意使用CGAL::Exact_predicates_exact_constructions_kernel
吗?