我想修改一个在正方形网格(它是基于代理的生物学模型)上运行的Python脚本,以在六边形的宇宙中工作。在Python中生成,填充和绘制六边形网格
这是我如何创建和初始化矩形模型中的2D矩阵:基本上,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
我那么就让根据某些码规则的矩阵进化并最终通过建立一个咸菜文件的打印:
name = "{0}-{1}-{2}-{3}-{4}.pickle".format(R, A1, A2, B1, B2)
pickle.dump(a, open(name,"w"))
现在,我想要做的完全一样的,但是,六角格子。我读了this有趣的StackOverflow问题,它清楚地说明了如何用三个坐标表示六边形网格上的位置,但是有几件事情我的知识仍不明确, ,考虑到我想要的不等同于3D矩阵,由于坐标的限制,并且(b)如何绘制它?
至于(一),这就是我要怎样做:
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矩阵一样,然后找到一种方法来打印它的一个子集根据对坐标的约束。我正在寻找一种更简单的方法,更重要的是,要理解如何绘制算法产生的六角网格(对此没有线索,我暂时还没有尝试过任何方法)。