CGAL:段和多边形之间的交点?

Iva*_*Siu 6 cgal computational-geometry

我有一组多边形,我想测试它和一个段之间的交集.我检查了手册,但找不到匹配的功能.点,线,线段,三角形,平面之间的交点确实存在.多边形之间的交叉点也在那里.我的问题是:

  1. 有这样的功能吗?
  2. 如果不是,这是否意味着我需要将多边形分解成段并在这些段之间进行交叉?(我不愿意这样做的原因是,我认为CGAL实际上可能会用这种方式来做多边形之间的交叉.为什么没有这样的函数来交叉线和多边形?)或者还有其他更好的方法吗?这样做的方法?

kir*_*olo 7

最简单的方法是创建一个可能包含多个多边形的Polygon_set_2对象.要测试外部多边形与此集合的交集,只需应用do_intersect方法即可.

例如:

typedef CGAL::Polygon_set_2<Kernel, std::vector<Kernel::Point_2>> Polygon_set_2;
Polygon_set_2 ps;
Polygon_2     poly;
Polygon_2     line; // line is a polygon defined by 2 points

ps.insert(poly);
bool intersect = ps.do_intersect(line);
Run Code Online (Sandbox Code Playgroud)

有关polygon_set_2的更多信息:

我希望很清楚,基里尔

  • 是的,对于 CGAL 4.7,这绝对行不通。使用只有两个点的多边形调用 `do_intersect()` 失败,并显示“多边形边界自身重叠”的消息。和“多边形并不简单。” (2认同)