C++ 是否有CGAL函数用于查找二维直线(直线_2)和一组带孔的二维多边形(多边形_带孔_2)之间的所有交点?

C++ 是否有CGAL函数用于查找二维直线(直线_2)和一组带孔的二维多边形(多边形_带孔_2)之间的所有交点?,c++,cgal,C++,Cgal,我有一条从0,0到1024,0的线。许多带孔的多边形位于直线的两端之间。我想知道是否有任何CGAL函数可以告诉我线段和所有带孔多边形之间的所有交点 或者,一条直线和一个带孔的多边形相交的函数目前也足够了。此函数必须告诉我线与带孔多边形相交的所有点。答案是否。多边形的相交函数仅适用于两个多边形,相交的含义是一个平面,由两个多边形内的点组成。如果要查找线段和多边形边界的交点,则需要逐个提取所有边界边并逐个计算所有交点。示例如下: #include <iostream> #include

我有一条从0,0到1024,0的线。许多带孔的多边形位于直线的两端之间。我想知道是否有任何CGAL函数可以告诉我线段和所有带孔多边形之间的所有交点


或者,一条直线和一个带孔的多边形相交的函数目前也足够了。此函数必须告诉我线与带孔多边形相交的所有点。

答案是否。多边形的相交函数仅适用于两个多边形,相交的含义是一个平面,由两个多边形内的点组成。如果要查找线段和多边形边界的交点,则需要逐个提取所有边界边并逐个计算所有交点。示例如下:

#include <iostream>
#include <vector>

#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
#include <CGAL/Polygon_2.h>

using Kernel = CGAL::Exact_predicates_exact_constructions_kernel;
using Polygon = CGAL::Polygon_2<Kernel>;
using Point = Polygon::Point_2;
using Segment = Polygon::Segment_2;

int main()
{
  // ------ define segment
  const Segment s{{-1000, 0}, {1000, 0}};
  // ------ define polygon
  const std::vector<Point> pts{{3, 3}, {-3, 3}, {-3, -3}, {3, -3}};
  const Polygon p(pts.cbegin(), pts.cend());
  // ------ find all intersections of the segment with polygon edges
  for (auto eit = p.edges_begin(); eit != p.edges_end(); ++eit)
  {
    const auto res = CGAL::intersection(s, *eit);
    if (res)
    {
      const auto pt = boost::get<Point>(&*res);
      std::cout << *pt << std::endl;
    }
  }
}
#包括
#包括
#包括
#包括
使用Kernel=CGAL::Exact\u谓词\u Exact\u构造\u内核;
使用Polygon=CGAL::Polygon_2;
使用点=多边形::点2;
使用段=多边形::段2;
int main()
{
//----定义段
常量段s{-1000,0},{1000,0};
//----定义多边形
向量pts{{3,3},{-3,3},{-3,-3},{3,-3},{3,-3};
常数多边形p(pts.cbegin(),pts.cend());
//----查找线段与多边形边的所有交点
对于(自动eit=p.边_开始();eit!=p.边_结束();++eit)
{
const auto res=CGAL::交叉点,*eit;
如果(res)
{
const auto pt=boost::get(&*res);
标准::cout