为了账号安全,请及时绑定邮箱和手机立即绑定

生成具有连通性信息的六角格

生成具有连通性信息的六角格

慕后森 2023-06-20 15:41:23
我目前正在尝试实现一个简单的晶格气体模拟,其中涉及粒子在六角形网格中弹跳。首先,我需要生成网格,最终我想创建某种数据结构(在 Matlab 或 Python 中),其中包含每个节点的坐标,以及它的六个邻居中的每一个的标识(假设它不是边界节点)。对我来说,主要问题是弄清楚如何包含连接性。例如,假设我找到了一种方法来索引我所有节点的集合。给定一些节点i,我希望能够找到节点的索引说它是正确的。我可以开发一些一致的方法来枚举节点,这样我就可以计算它的邻居的索引,但是如果我想生成不太简单的网格,这不会给我太多的灵活性。执行此操作的最佳方法是什么?我知道这是一个非常简单的问题,但自从我上一节计算机科学课以来已经有一段时间了,所以此时我几乎只熟悉向量/列表。提前致谢!
查看完整描述

1 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

如果您熟悉 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]sincen2的行列索引是 [0,1]。要引用n4它将是ls[1,0])。同时对于奇数行,它的右下节点列索引将是它自己的col索引+1,它的左下节点列索引是它自己的col索引。(示例:n5索引是 [1,1] 在奇数行 1,n9将是ls[2,2]并且n8将是ls[2,1])。

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


查看完整回答
反对 回复 2023-06-20
  • 1 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信