CGAL新手问题:哪些片段相交?

时间:2010-10-28 15:59:41

标签: c++ geometry computational-geometry cgal

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

我根本没有使用CGAL库和计算机几何的经验。我只需要一个算法来做上面提到的东西。因此,我认为,使用此库将更好/更有效,而不是实现自定义功能。

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

任何提示? 感谢您的投入!

的Sascha

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相互作用,而只需要知道段的数量,如文中所述。

1 个答案:

答案 0 :(得分:1)

您可以在两个细分中应用do_intersect功能。

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