gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:36:09 27 4
gpt4 key购买 nike

我有一组线段(每个线段用两个点定义;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/

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