如何修复构造Polygon_set_2时"CGAL::P修复异常"



我正在Visual Studio项目中使用CGAL库。 我正在尝试创建一个由带孔的多边形组成的polygon_set_2。 即使仅使用简单的多边形,我在创建polygon_set_2时也遇到了异常。

类型定义:

typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef K::Point_2 CGALPoint;
typedef CGAL::Polygon_2<K> CGALInnerPolygon;
typedef CGAL::Polygon_set_2<K> CGALMultiPolygon;

问题代码:

CGALInnerPolygon cgalpoly;
cgalpoly.push_back(CGALPoint(0, 0));
cgalpoly.push_back(CGALPoint(1, 1));
cgalpoly.push_back(CGALPoint(1, 0));
CGALMultiPolygon multipolygon;
multipolygon.insert(cgalpoly);

我在插入调用中遇到异常。 异常的输出为:

在 XXX.exe 中0x75112CF2引发异常:Microsoft C++异常:内存位置 0x00191AF0 的 CGAL::P recondition_exception

它实际上是两件事的结合。 首先,多边形点是逆时针的,正如斯洛里奥特所提到的。 为了在一般情况下解决此问题,添加了以下代码:

if (cgalpoly.is_clockwise_oriented())
{
cgalpoly.reverse_orientation();
}

其次,Polygon_set_2必须使用精确的构造内核:

typedef CGAL::Exact_predicates_exact_constructions_kernel K;

最新更新