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

平面上有许多2D点.

首先,我通过两种方法获得了一个图表:

>执行Delaunay三角剖分,然后删除每个三角形的最长边;
>通过代码NGL:http://www.ngraph.org/获取相对邻居图

上述两种方法的结果似乎相似.

但现在,我有一个问题.如何从上面的相对邻居图中获取所有多边形?
也就是说,这些多边形将永远不会包含其他边缘.
我想从图中获得所有子区域,因此我可能首先找到所有多边形.

有人知道怎么做吗?

最佳答案 首先,您提到的两个图表实际上是不同的图表类型:

> Relative Neighbourhood Graph包含在没有满足dist(i,k)的另一个顶点k的情况下的边缘ij. dist(i,j)和dist(j,k)< DIST(I,J).
>正如您所提到的,Urquhart Graph是通过去除Delaunay Triangulation中每个三角形的最长边形成的.

虽然这些图通常是相似的,并且在某些情况下可以是相同的,但它们通常是不同的.

您的注释似乎表明您确实正在构建来自Delaunay三角剖分T的Urquhart图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

结果将是一组不相交的多边形作为三角形列表.

形成多边形区域边界的边将是出现在图U中的那些边 – 这些是与不同多边形中的三角形相邻的边.

希望这可以帮助.

点赞