【问题标题】:CGAL Newbie Question: Which segments intersect?CGAL 新手问题:哪些部分相交?
【发布时间】:2010-10-28 15:59:40
【问题描述】:

我有一组线段(每个线段定义有两个点;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 相交,只需要知道段的数量,如文中所述。

【问题讨论】:

    标签: c++ geometry computational-geometry cgal


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多