gpt4 book ai didi

c++ - 用 CGAL 剪裁线

转载 作者:行者123 更新时间:2023-12-01 14:08:47 24 4
gpt4 key购买 nike

我想要实现的是获得线和一组带孔的多边形之间的交点 ->通过掩码(多边形组)剪裁线 ->结果将是另一条线。
问题在 CGAL: Intersection between a segment and a polygon?建议使用带有两点的 Polygon 来表示线。在 CGAL 示例的帮助下,我想出了以下代码段。我的目的是使用交点计算位于矩形内的部分线。然而,结果有 4 个点,它似乎是在计算多边形和由线定义的半平面之间的交点。

任何人都可以对此有所了解吗?

typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel;
typedef Kernel::Point_2 Point_2;
typedef CGAL::Polygon_2<Kernel> Polygon_2;
typedef CGAL::Polygon_with_holes_2<Kernel> Polygon_with_holes_2;
typedef std::list<Polygon_with_holes_2> Pwh_list_2;

int main()
{
Polygon_2 P; // rectangle
P.push_back (Point_2 (10, 10));
P.push_back (Point_2 (20, 10));
P.push_back (Point_2 (20, 20));
P.push_back (Point_2 (10, 20));

Polygon_2 Q; // line
Q.push_back (Point_2 (0, 15));
Q.push_back (Point_2 (25, 15));

Pwh_list_2 symmR;
Pwh_list_2::const_iterator it;

CGAL::intersection (Q, P, std::back_inserter(symmR));


for (it = symmR.begin(); it != symmR.end(); ++it) {
std::cout << "--> ";
print_polygon_with_holes( *it);
}

getchar();
return 0;
}

最佳答案

这段代码定义了一个交点的多边形,而不是一条线:

  Polygon_2 Q; // line
Q.push_back (Point_2 (0, 15));
Q.push_back (Point_2 (25, 15));

只有两个点,这是一个从一个点到第二个再回来的退化多边形。

This image显示了两个重叠边缘弯曲并稍微分开的配置,因此更清楚发生了什么。从该图像中,您可以看到为什么结果是具有四个顶点(来自四个交点)的退化多边形。

注意:当我运行此代码时,我收到以下错误消息,说明发生了什么。
CGAL warning: check violation!
Expression : false
File : /usr/local/include/CGAL/Boolean_set_operations_2/Gps_polygon_validation.h
Line : 263
Explanation: The polygon boundary self overlaps.

搜索文档( herehere ),我找不到 Polygon_2-Line_2 交集函数。

关于c++ - 用 CGAL 剪裁线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13045772/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com