5

六角形の宇宙で動作するように、正方格子 (生物学のエージェント ベースのモデル) で動作する私の 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

次に、特定のルールに従ってマトリックスを進化させ、最後に pickle ファイルを作成して出力します。

name = "{0}-{1}-{2}-{3}-{4}.pickle".format(R, A1, A2, B1, B2)
pickle.dump(a, open(name,"w"))

今、私はまったく同じことをしたいのですが、六角形の格子上で. この興味深い StackOverflow question を読んで、六角形格子上の位置を3つの座標で表す方法を明確にしましたが、私の知る限り、いくつかのことがわかりません。

(a) Python で 3 つの軸をどのように処理すればよいでしょうか。座標の制約により、必要なものが 3D マトリックスと同等ではないことを考慮して、

(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行列を初期化し、座標の制約に従ってそのサブセットを印刷する方法を見つけるのは、かなり複雑に思えます。私はより簡単な方法を探しており、さらに重要なことに、アルゴリズムから得られた六角形の格子をプロットする方法を理解するために探しています (それについての手がかりはありません。今のところ何も試していません)。

4

1 に答える 1