Graph 如何从相对邻域图中获取闭合多边形
平面中有许多二维点 首先,我通过两种方法获得了一个图:Graph 如何从相对邻域图中获取闭合多边形,graph,geometry,computational-geometry,Graph,Geometry,Computational Geometry,平面中有许多二维点 首先,我通过两种方法获得了一个图: 执行Delaunay三角剖分,然后删除每个三角形的最长边 通过代码NGL获取相对邻居图: 上述两种方法的结果似乎相似。 但是现在,我有一个问题。如何从上述相对相邻图中获取所有多边形? 也就是说,这些多边形内部永远不会包含其他边。 我想从图中获得所有的子区域,这样我可以首先找到所有的多边形 有人知道怎么做吗?首先,您提到的两个图形实际上是不同的图形类型: 在缺少另一个顶点时,包含一条边ij,k满足dist(i,k)
有人知道怎么做吗?首先,您提到的两个图形实际上是不同的图形类型:
ij
,k
满足dist(i,k)
和dist(j,k)
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三角剖分,然后删除每个三角形的最长边。所以,不存在浮动边缘。是的。图中所示的图形应称为厄克特图。你提供的算法对我来说很清楚。我将努力实施它。祝它成功。非常感谢。