我想修改我的在方晶格(它是基于代理的生物学模型)上运行的Python脚本,以在六边形宇宙中工作。
这就是我在方形模型中创建和初始化二维矩阵的方法:基本上,N 是晶格的大小,R 给出了我需要在算法开始时更改值的矩阵部分的半径:
a = np.zeros(shape=(N,N))
center = N/2
for i in xrange(N):
for j in xrange(N):
if( ( pow((i-center),2) + pow((j-center),2) ) < pow(R,2) ):
a[i,j] = 1
然后,我让矩阵根据某些规则演变,最后通过创建 pickle 文件进行打印:
name = "{0}-{1}-{2}-{3}-{4}.pickle".format(R, A1, A2, B1, B2)
pickle.dump(a, open(name,"w"))
现在,我想做完全相同的事情,但在六角形格子上。我读this https://stackoverflow.com/questions/2049196/generating-triangular-hexagonal-coordinates-xyz有趣的 StackOverflow 问题,它阐明了如何用三个坐标表示六角形晶格上的位置,但据我所知,有几件事仍然模糊,即
(a)考虑到由于坐标的限制,我想要的并不等于3D矩阵,我应该如何处理Python中的三个轴,以及
(b) 如何绘制它?
至于(a),这就是我试图做的:
a = np.zeros(shape=(N,N,N))
for i in xrange(N/2-R, N/2+R+1):
for j in xrange(N/2-R, N/2+R+1):
for k in xrange(N/2-R, N/2+R+1):
if((abs(i)+abs(j)+abs(k))/2 <= 3*N/4+R/2):
a[i,j,k] = 1
在我看来,初始化一个 NxNxN 矩阵,然后找到一种方法根据坐标上的约束来打印它的子集是相当复杂的。我正在寻找一种更简单的方法,更重要的是,为了理解如何绘制算法产生的六边形格子(对此没有任何线索,我暂时没有尝试任何东西)。