【问题标题】:Drawing cubic lattice in Python在 Python 中绘制立方晶格
【发布时间】:2012-07-07 07:27:29
【问题描述】:

所以我想在 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)

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

但我需要它们交替 :\ 正确的位置只在 i 方向。我如何纠正其他人以制作简单的立方晶格?我试着摆弄球体的位置(i,j,k+-number),但这样我得到了 bcc 格子(中间有一个绿色球体,周围有其他球体)。

我被困住了……

【问题讨论】:

    标签: python drawing


    【解决方案1】:

    你需要的是这样的:

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

    【讨论】:

    • 这行得通:) 我尝试用 if else 循环做一些事情,但我无法正确定位。谢谢你:)
    【解决方案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))
    

    结果

    【讨论】:

    • 也可以,我应该看看这段代码,上面似乎更容易理解,但也感谢你的帮助:)
    猜你喜欢
    • 1970-01-01
    • 2022-11-10
    • 2015-01-22
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    相关资源
    最近更新 更多