我目前正在尝试实现一个简单的晶格气体模拟,其中涉及在六角形网格中反弹的粒子。首先,我需要生成网格,这是更详细的描述在这里。最终,我想创建某种数据结构(在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]。要引用的n4
是ls[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] 删除。
我来说两句