Python 如何生成矩形蜂窝网络

Python 如何生成矩形蜂窝网络,python,r,igraph,graph-theory,Python,R,Igraph,Graph Theory,如何生成一个类似于图形的对象(在R或Python中),表示连接六边形的规则矩形网络,如下图所示: 图形“中心”处的顶点应各有6条边,图形“边”处的顶点应各有2条、3条或5条边。您可以创建一个邻接集网格,表示每个单元格所连接的单元格的索引: class HexGraph: def __init__(self, rows, cols): self.rows = rows self.cols = cols self.cells = [[set(

如何生成一个类似于图形的对象(在R或Python中),表示连接六边形的规则矩形网络,如下图所示:


图形“中心”处的顶点应各有6条边,图形“边”处的顶点应各有2条、3条或5条边。

您可以创建一个邻接集网格,表示每个单元格所连接的单元格的索引:

class HexGraph:
    def __init__(self, rows, cols):
        self.rows = rows
        self.cols = cols
        self.cells = [[set() for c in range(self.cols)] for r in range(self.rows)]
        self.build_connections()

    def build_connections(self):
        offsets = (((-1, 0), (1, 0), (0, -1), (0, 1), (-1, -1), (1, -1)),
                   ((-1, 0), (1, 0), (0, -1), (0, 1), (-1, 1), (1, 1)))
        for rdx, line in enumerate(self.cells):
            for cdx, cell in enumerate(line):
                for dr, dc in offsets[rdx % 2]:
                    r = rdx + dr
                    c = cdx + dc
                    if r >= 0 and r < self.rows and c >= 0 and c < self.cols:
                        cell.add((r, c))

    def __str__(self):
        result = []
        for line in self.cells:
            res = ''
            for cell in line:
                res += str(cell) + ', '
            result.append(res)
        return '\n'.join(result)


if __name__ == '__main__':

    g = HexGraph(5, 4)
    print(g)
它对应于您发布的图像中节点之间的连接,每第二行向左拉一点,以便与正上方和下方的节点垂直对齐


请原谅这张质量低劣的图纸。

您自己尝试过吗?任何可能的方法的代码或计划/大纲?它会不仅仅是一种图形表示吗?不幸的是,我不知道一种可能的方法。我对图形表示不是特别感兴趣;我需要类似图形的对象来运行一些模拟
{(0, 1), (1, 0)}, {(0, 2), (1, 0), (0, 0), (1, 1)}, {(1, 2), (0, 3), (0, 1), (1, 1)}, {(1, 2), (1, 3), (0, 2)}, 
{(0, 1), (0, 0), (2, 1), (2, 0), (1, 1)}, {(0, 1), (1, 2), (2, 1), (2, 2), (1, 0), (0, 2)}, {(1, 3), (0, 2), (2, 3), (2, 2), (0, 3), (1, 1)}, {(1, 2), (0, 3), (2, 3)}, 
{(3, 0), (1, 0), (2, 1)}, {(3, 0), (3, 1), (2, 0), (2, 2), (1, 0), (1, 1)}, {(1, 2), (3, 2), (3, 1), (2, 1), (2, 3), (1, 1)}, {(1, 2), (3, 2), (1, 3), (3, 3), (2, 2)}, 
{(3, 1), (2, 1), (2, 0), (4, 1), (4, 0)}, {(3, 2), (3, 0), (2, 1), (2, 2), (4, 2), (4, 1)}, {(3, 3), (3, 1), (2, 3), (4, 3), (2, 2), (4, 2)}, {(3, 2), (2, 3), (4, 3)}, 
{(3, 0), (4, 1)}, {(3, 0), (4, 2), (3, 1), (4, 0)}, {(3, 2), (3, 1), (4, 1), (4, 3)}, {(4, 2), (3, 2), (3, 3)},