2012-07-07 361 views
1

所以我想用Python在Python中绘制一个简单的立方晶格。在Python中绘制立方晶格

我有一个简单的方法来制作具有相同颜色的小球体的格子,但我希望颜色相互交替:为了制作NaCl格子,我需要有一种颜色的球体,其中包含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) 

我也得到一个颜色的球体旁边,不同颜色的speres,但他们在行:

lattice

但我需要他们备用:\正确的位置只在i方向。我如何纠正其他人做一个简单的立方格?我尝试摆弄球体的位置(i,j,k + - 数字),但是这样我得到了密件抄送格子(中间有一个绿色球体,其他人围绕着它)。

我卡住了...

回答

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整除。

+0

这工作:)我想这样做与别人是否环路的东西,但我不能得到正确的定位。谢谢:) – 2012-07-07 21:45:36

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)) 

结果

enter image description here

+0

工作太多了,我应该看看这个代码,上面看起来更容易理解,但也谢谢帮助:) – 2012-07-07 21:46:34