用Python绘制立方格

2024-10-04 03:25:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有一个简单的方法,用同样颜色的小球做晶格,但是我想让颜色交替:要制作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)

我得到一种颜色的球体,在不同颜色的球体旁边,但是它们是成排的:

lattice

但我需要他们交替:\正确的位置只在I方向。我如何修正其他的,使之成为一个简单的立方晶格?我试着摆弄球体的位置(I,j,k+-数),但是这样我得到了bcc晶格(一个绿色的球体在中间,其他的在它周围)。在

我被卡住了。。。在


Tags: infromposimportfor颜色晶格color
2条回答

你需要的是:

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整除来切换颜色。在

稍微概括一下:

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

相关问题 更多 >