【问题标题】:How many degrees of separation between 2 vertices on a Delaunay TriangulationDelaunay三角剖分上2个顶点之间的分离度数
【发布时间】:2018-10-24 11:46:13
【问题描述】:

我使用一组 LatLon 点的scipy.spatial Python 库制作了一个 Voronoi 图,以查找每个点的邻居。然后,我发现 Delaunay Triangulation 会更有用,现在我可以使用以下算法轻松找到每个点的“第一层”和“第二层”邻居:

def findNeighbors(delaunay):
    "Returns a adjacency list of the graph"
    neighbors = defaultdict(set)

    for simplex in delaunay.simplices:
        for vertice in simplex:
            other = set(simplex)
            other.remove(vertice)
            neighbors[vertice] = neighbors[vertice].union(other)
    return neighbors

def neighborCount(graph, start, target):
    if target in graph[start]:
        return 'First Tier Neighbor'
    elif graph[start] & graph[target]:
        return 'Second Tier Neighbor'

但问题是我需要找到“第 6 层邻居”,如果不循环遍历所有邻接列表,我无法找到一种方法。这是我要查找的“3rd Tier Neighbor”示例。

有没有更聪明的方法来做到这一点?

【问题讨论】:

    标签: python scipy voronoi delaunay


    【解决方案1】:

    我发现广度优先搜索或深度优先搜索算法可以做到这一点,但它们也返回路径,我不需要这个,所以我做了一个只返回路径长度的函数,让它变得更快。

    def getNeighbor(neighbors, graph):
        out = set()
        for neighbor in neighbors:
            out = out.union(graph[neighbor])
        return out 
    
    
    def tier_count(graph, start, target):
    
        if target in graph[start]:
            return "1 tier"
    
        else:  
            visited = set()
            queue = getNeighbor(graph[start], graph)
            count = 2
        
            while queue:
                if target in queue:
                    return str(count) + " Tier"
            
                else:
                    count += 1
                    visited = visited.union(queue)
                    queue = getNeighbor(queue, graph) - visited
                
        return "No tiers between these cells"
    

    【讨论】:

      猜你喜欢
      • 2020-08-05
      • 2021-05-27
      • 2015-01-07
      • 1970-01-01
      • 2019-04-18
      • 2020-10-20
      • 2019-09-28
      • 2013-11-19
      • 2021-05-14
      相关资源
      最近更新 更多