gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:13:54 24 4
gpt4 key购买 nike

平面上有很多2D点。首先,我通过两种方法得到了一张图:

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

  2. 通过代码NGL获取相对邻居图:http://www.ngraph.org/

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

有人知道怎么做吗?

最佳答案

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

  1. Relative Neighbourhood Graph包含一条边ij在没有另一个顶点的情况下k满意dist(i,k) < dist(i,j)dist(j,k) < dist(i,j) .

  2. Urquhart Graph通过从 Delaunay Triangulation 中的每个三角形中删除最长的边而形成,正如你所提到的。

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

您的评论似乎表明您确实正在构建厄克特图 U来自 Delaunay 三角测量 T ,因此,您可以更改边缘去除算法,以便在构建 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 中的那些边。 - 这些是与不同多边形中的三角形相邻的边。

希望这有帮助。

关于graph - 如何从相对邻域图中获取闭合多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17926029/

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