1

だから私はビジュアルパッケージを使ってPythonで単純な立方格子を描きたい.

すべて同じ色の小さな球でラティスを作成する簡単な方法がありますが、色を交互にしたい: NaCl ラティスを作成するには、1 つの色の球を他の色の 6 つの球で囲む必要があります。

だから私はこれをしました:

from __future__ import division
from visual import sphere,color

L = 5
R = 0.3

even = []
odd = []

for i in range(-L,L+1):
    if i%2==0:
        even.append(i)
    else:
        odd.append(i)

for i in even:
    for j in even:
        for k in even:
            sphere(pos=[i,j+1,k+1],radius=R,color=color.green)

for i in odd:
    for j in odd:
        for k in odd:
            sphere(pos=[i,j,k],radius=R,color=color.yellow)

そして、別の色の球体の隣にある色の球体を取得しますが、それらは行になっています:

格子

しかし、私はそれらを交互にする必要があります:\ 正しい配置は i 方向のみです。単純な立方格子を作成するために他のものを修正するにはどうすればよいですか? 球の位置(i、j、k +-number)をいじってみましたが、そのようにしてbcc格子(中央に1つの緑色の球、その周りに他の球)が得られました。

私は立ち往生しています...

4

2 に答える 2

3

必要なのはこれです:

from visual import sphere,color

count = 3
R=0.3

for x in range(-count,count+1):
    for y in range(-count,count+1):
        for z in range(-count,count+1):
            if ((x+y+z+3*count)%2) == 0:
                sphere(pos=[x,y,z],radius=R,color=color.green)
            else:
                sphere(pos=[x,y,z],radius=R,color=color.yellow)

ポイントは、(この場合は整数)座標の合計が2で割り切れるかどうかに応じて色を切り替える必要があるということです。

于 2012-07-07T11:48:12.830 に答える
1

少し一般化されたバージョン:

from visual import sphere,color
from itertools import product

L = 2
R = 0.25

xvals = range(-L, L+1)
yvals = range(-L, L+1)
zvals = range(-L, L+1)

colorfn = lambda *args: [color.yellow, color.green][sum(args)%2]

for pos in product(xvals, yvals, zvals):
    sphere(pos=pos, radius=R, color=colorfn(*pos))

結果は

ここに画像の説明を入力

于 2012-07-07T19:29:42.773 に答える