Graph 如何从相对邻域图中获取闭合多边形

Graph 如何从相对邻域图中获取闭合多边形,graph,geometry,computational-geometry,Graph,Geometry,Computational Geometry,平面中有许多二维点 首先,我通过两种方法获得了一个图: 执行Delaunay三角剖分,然后删除每个三角形的最长边 通过代码NGL获取相对邻居图: 上述两种方法的结果似乎相似。 但是现在,我有一个问题。如何从上述相对相邻图中获取所有多边形? 也就是说,这些多边形内部永远不会包含其他边。 我想从图中获得所有的子区域,这样我可以首先找到所有的多边形 有人知道怎么做吗?首先,您提到的两个图形实际上是不同的图形类型: 在缺少另一个顶点时,包含一条边ij,k满足dist(i,k)

平面中有许多二维点 首先,我通过两种方法获得了一个图:

  • 执行Delaunay三角剖分,然后删除每个三角形的最长边

  • 通过代码NGL获取相对邻居图:

  • 上述两种方法的结果似乎相似。 但是现在,我有一个问题。如何从上述相对相邻图中获取所有多边形? 也就是说,这些多边形内部永远不会包含其他边。 我想从图中获得所有的子区域,这样我可以首先找到所有的多边形


    有人知道怎么做吗?

    首先,您提到的两个图形实际上是不同的图形类型:

  • 在缺少另一个顶点时,包含一条边
    ij
    k
    满足
    dist(i,k)
    dist(j,k)

  • 如前所述,通过从中的每个三角形中删除最长边来形成

  • 虽然这些图形通常是相似的,在某些情况下可能是相同的,但它们通常是不同的

    您的评论似乎表明您确实在从Delaunay三角剖分
    T
    构建厄尔克特图
    U
    ,因此,您可以在构建
    U
    时更改边移除算法,以同时构建不相交的多边形集

    只需注意,当从三角剖分
    T
    中删除边时,也会合并与该边相邻的两个多边形。最初,每个内部边将与两个三角形相邻,但随着边移除的进行,边将与更复杂的多边形相邻

    算法可按如下方式进行:

    // Data-structures:
    // S: a set of polygons - each polygon is a list of triangles
    // P: a pointer to the parent polygon for each triangle
    // Triangulation should give O(1) access to edge-adjacent triangles
    
    S <- push each triangle as it's own initial polygon
    P <- mark each triangle as it's own initial parent
    
    while (removing edges)
        ij <- edge to be removed from U
    
        ti <- 1st tria adjacent to edge ij
        tj <- 2nd tria adjacent to edge ij
    
        pi <- P(ti); // poly containing ti
        pj <- P(tj); // poly containing tj
    
        // merge pi and pj into single poly
        S(pi) <- S(pj) // push triangles from pj onto pi
        P(S(pj)) = pi  // mark pi as parent for trias
                       // from pj
        S(pj) <- 0     // poly pj is now null
    endwhile
    
    //数据结构:
    //一组多边形-每个多边形都是三角形列表
    //P:指向每个三角形的父多边形的指针
    //三角剖分应允许O(1)访问相邻三角形的边
    
    我想你也有类似的想法。如果多边形中有一条边(左下角),您想检索它吗?你的图表有什么连接信息?嗨,西里尔。维基百科上的NGL图像可能与此有所不同:它是通过以下方法获得的:执行Delaunay三角剖分,然后删除每个三角形的最长边。所以,不存在浮动边缘。是的。图中所示的图形应称为厄克特图。你提供的算法对我来说很清楚。我将努力实施它。祝它成功。非常感谢。