c++ - CGAL新手问题: Which segments intersect?

标签 c++ geometry computational-geometry cgal

我有一组线段(每个线段用两个点定义;2D)并且想知道对于每个线段 x,有多少其他线段 y1,...,yn 与 x 相交。 您将如何在 CGAL 中高效地做到这一点?

我对 CGAL 库和计算机几何完全没有任何经验。我只需要一个算法来完成上面提到的事情。因此我想,与其实现自定义函数,不如使用这个库更好/更高效。

CGAL 示例 sweep_line.cpp 向我展示了如何获取一组 o 线段的所有交点。因为我对点不感兴趣,所以我必须检查点和线段以获得每个线段的交叉点数。但我不知道如何在 CGAL 中进行。而且我还假设有一种更有效的方法可以做到这一点;意思是:避免计算点并通过新的检查遍历所有线段是否与任何找到的点相交。

有什么建议吗? 感谢您的意见!

萨沙

PS:又一个菜鸟问题:为什么下面的结果打印出来都是负号?

Segment_2 segments[] = {Segment_2  (Point_2 (1, 5), Point_2 (8, 5)),
                              Segment_2 (Point_2 (1, 1), Point_2 (8, 8)),
                              Segment_2 (Point_2 (3, 1), Point_2 (3, 8)),
                              Segment_2 (Point_2 (8, 5), Point_2 (8, 8))};

      std::vector<Point_2>     pts;

      CGAL::compute_intersection_points (segments, segments + 4,
                                         std::back_inserter (pts));

找到3个交点: -21/-7 -21/-7 -3/-1 -5/-1 -35/-7 -35/-7

PS2:我发现我的标题和第一行描述的不是同一个问题。我不需要知道哪些线段与 x 相交,而只需要知道线段的数量,如文中所述。

最佳答案

您可以在两个线段上应用 do_intersect 函数。

更多信息可以在这里找到: http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Kernel_23_ref/Function_do_intersect.html

关于c++ - CGAL新手问题: Which segments intersect?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4044732/

相关文章:

algorithm - 在小于 O(n) 的情况下检查凸多边形相交?

c++ - 我可以指定默认值吗?

c# - C++ 和 C# 中的混合数组

具有重载成员函数的 C++ std::mem_fn

用于计算任意多面体的表面积和体积的Python库

algorithm - 如果每个点的每个坐标都是有理数,则 O(n) 时间内的凸包

c++ - 在 C++ 中验证 DO-178B/C 合规性

algorithm - 检测具有一定曲率的边缘

algorithm - 拼图 : Find largest rectangle (maximal rectangle problem)

c++ - 我如何使用中点圆算法去除在 SDL 中绘制的圆中的这些间隙?