Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 查找线段的交点以及每个交点的相交线段列表_C++_Algorithm_Geometry_Computational Geometry_Cgal - Fatal编程技术网

C++ 查找线段的交点以及每个交点的相交线段列表

C++ 查找线段的交点以及每个交点的相交线段列表,c++,algorithm,geometry,computational-geometry,cgal,C++,Algorithm,Geometry,Computational Geometry,Cgal,我试图使用CGAL从2D中的线段列表中找出“所有交点”和“每个交点的相交线段”。出于某些原因,我想使用Bentley–Ottmann算法。CGAL库有一个C++实现的这个算法调用,但我只能找到交点。CGAL中是否存在其他实现?或者我该如何解决这个问题 编辑: 真正的快速修复方法是使用扫描线2生成所有交点,循环遍历所有生成的交点,并为每个交点记录点的坐标和包含该点的所有线段到您选择的结构中 快速解决方案(尽管不是最有效的)是: 然后只需创建交叉点结构的向量,这样就可以存储所有不同的交叉点 vec

我试图使用CGAL从2D中的线段列表中找出“所有交点”和“每个交点的相交线段”。出于某些原因,我想使用Bentley–Ottmann算法。CGAL库有一个C++实现的这个算法调用,但我只能找到交点。CGAL中是否存在其他实现?或者我该如何解决这个问题

编辑: 真正的快速修复方法是使用扫描线2生成所有交点,循环遍历所有生成的交点,并为每个交点记录点的坐标和包含该点的所有线段到您选择的结构中


快速解决方案(尽管不是最有效的)是:

然后只需创建交叉点结构的向量,这样就可以存储所有不同的交叉点

vector<intersection> intersectionVector;
向量相交向量;
然后,只需在类似于以下内容的所有线段中循环:

for (int i = 0; i < numSegments; i++){
    for (int j = 0; j < numSegments; j++){
        //Don't look at the same points.        
        if (i == j)
            continue;
        //See below for pseudocode for this part.
    }
}
for(int i=0;i
现在来填补这一块,而不是重新创造任何只是参考

如上面的链接所示,计算r×s和(q)的值− p) 其中x是向量叉积。从这里开始,如果您关心细节,只需使用if/else块来解释这四种情况(ctrl f表示“Now there four cases:”)。如果你只是想要你在问题中概述的内容,只需检查案例3的有效性。如果有效,则将线段索引以及x和y坐标存储在向量/使用的任何结构中

您需要做的唯一额外的事情是使用计算u并将其应用于正在检查的两条线段中的第二条线段,以便存储交点的x y坐标。

编辑: 真正的快速修复方法是使用扫描线2生成所有交点,循环遍历所有生成的交点,并为每个交点记录点的坐标和包含该点的所有线段到您选择的结构中


快速解决方案(尽管不是最有效的)是:

然后只需创建交叉点结构的向量,这样就可以存储所有不同的交叉点

vector<intersection> intersectionVector;
向量相交向量;
然后,只需在类似于以下内容的所有线段中循环:

for (int i = 0; i < numSegments; i++){
    for (int j = 0; j < numSegments; j++){
        //Don't look at the same points.        
        if (i == j)
            continue;
        //See below for pseudocode for this part.
    }
}
for(int i=0;i
现在来填补这一块,而不是重新创造任何只是参考

如上面的链接所示,计算r×s和(q)的值− p) 其中x是向量叉积。从这里开始,如果您关心细节,只需使用if/else块来解释这四种情况(ctrl f表示“Now there four cases:”)。如果你只是想要你在问题中概述的内容,只需检查案例3的有效性。如果有效,则将线段索引以及x和y坐标存储在向量/使用的任何结构中

您需要做的唯一额外的事情是使用计算u并将其应用于正在检查的两条线段中的第二条线段,以便存储交点的x y坐标