如何在构造 Polygon_set_2 时修复 'CGAL::Precondition_exception'
How to fix 'CGAL::Precondition_exception' when constructing Polygon_set_2
我在 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++ 异常:CGAL::Precondition_exception 在内存位置 0x00191AF0
它实际上是两件事的结合。首先,正如 sloriot 提到的那样,多边形点多为逆时针方向。为了在一般情况下解决此问题,添加了以下代码:
if (cgalpoly.is_clockwise_oriented())
{
cgalpoly.reverse_orientation();
}
其次,Polygon_set_2必须使用精确的构造内核:
typedef CGAL::Exact_predicates_exact_constructions_kernel K;
我在 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++ 异常:CGAL::Precondition_exception 在内存位置 0x00191AF0
它实际上是两件事的结合。首先,正如 sloriot 提到的那样,多边形点多为逆时针方向。为了在一般情况下解决此问题,添加了以下代码:
if (cgalpoly.is_clockwise_oriented())
{
cgalpoly.reverse_orientation();
}
其次,Polygon_set_2必须使用精确的构造内核:
typedef CGAL::Exact_predicates_exact_constructions_kernel K;