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

迈克·D

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

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

杰夫

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章