【问题标题】:Generating a Hexagonal Lattice With Connectivity Information生成具有连通性信息的六角点阵
【发布时间】:2020-12-13 16:45:26
【问题描述】:

我目前正在尝试实现一个简单的晶格气体模拟,该模拟涉及粒子在六边形网格中弹跳。首先,我需要生成网格,在here 中有更详细的描述。最终,我想创建某种数据结构(在 Matlab 或 Python 中),其中包含每个节点的坐标,以及每个节点的六个邻居的身份(假设它不是边界节点)。

对我来说,主要问题是弄清楚如何包含连接性。例如,假设我找到了一种方法来索引我的所有节点集。给定一些节点i,我希望能够找到节点的索引,说它是对的。我可以开发一些一致的方式来枚举节点,这样我就可以计算其邻居的索引,但是如果我想生成不太简单的网格,这并没有给我太大的灵活性。这样做的最佳方法是什么?我知道这是一个非常简单的问题,但距离我上一次计算机科学课已经有一段时间了,所以我现在几乎只熟悉向量/列表。提前致谢!

【问题讨论】:

    标签: python arrays matlab indexing


    【解决方案1】:

    如果您熟悉 Python 中的 OOP 并希望进行自定义,我建议您简单地自己从头开始编写节点对象,并将它们实现为类似于双向链表,其中每个节点都包含对其所有邻居的引用。

    如果您坚持将所有节点保存在某种类似数组的对象中,我会建议使用类似于具有六边形网格的视频游戏处理它们的坐标的索引的二维数组对象。

    n1 - n2 - n3
      \ / \  /  \
       n4 - n5 - n6
      / \  /  \  /
    n7 - n8 -  n9
    

    使用上图,您可以创建类似ls = [[n1,n2,n3],[n4,n5,n6],[n7,n8,n9]] 的内容。偶数行的右下节点的列索引将是它自己的列索引,左下节点将是它的列索引 1(例如,n2 在偶数行 0 中,引用 n5 它将是ls[1,1],因为 n2 的行列索引是 [0,1]。要引用 n4,它将是 ls[1,0])。同时对于奇数行,它的右下节点列索引将是它自己的col索引+1,它的左下节点列索引是它自己的col索引。 (例如:n5 索引是奇数行 1 中的 [1,1],n9 将是 ls[2,2]n8 将是 ls[2,1]

    编辑:我索引ls 的方式是通过numpy 的索引方法。如果您使用的是 python 内置列表,则需要单独的括号(例如,numpy 中的 ls[2,1]ls[2][1] 用于 python 内置列表)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 2015-08-29
      • 2021-06-10
      • 1970-01-01
      • 2016-05-21
      相关资源
      最近更新 更多