我试着做这个练习:
氯化钠晶体的钠和氯原子排列在立方体上 但原子在钠和氯之间交替,所以每一个钠 被六个氯包围,每个氯被六个钠包围。 使用两种不同的颜色创建氯化钠晶格的可视化 表示两种类型的原子
我的代码是:
from vpython import *
from numpy import *
L = 5
R = 0.5
for i in range(-L,L,2):
for j in range(-L,L,2):
for k in range(-L,L,2):
sphere(pos=vector(i,j,k),radius = R, color = vec(0,1,1))
for l in range(-L+1,L+1,2):
for m in range(-L+1,L+1,2):
for n in range(-L+1,L+1,2):
sphere(pos=vector(l,m,n),radius = R, color = vec(1,1,0))
从这个角度看,这是不正确的,因为有相同颜色的列。我做错了什么
首先,所提供的代码没有生成具有预期取向的氯化钠的良好排列晶格
考虑每个输出的前几个数字。
如果前一个球体将后一个球体偏移一个单位,则每个球体将有10个相邻球体,而不是6个相邻球体。这就解释了为什么球体被渲染得相距很远,而且每个球体似乎都有10个邻居,因此所尝试的并不是紧密堆积的立方晶格,而是全部展开。实际上,您所做的错误是在您确实不应该的情况下对晶格应用偏移,在球体之间引入间隙,使其在视觉上看起来不清晰
为了正确地执行此操作,请缓慢地执行此操作,每次执行一步,迭代该层的每个单元,并一次性渲染球体。让我们先从二维棋盘模式开始
考虑以下内容:
通过简单地添加x和y来计算颜色,然后取结果的模2来确定使用哪种颜色,因为奇数和偶数之和将产生奇数(否则它们是偶数),渲染出来时此数学特性将具有第一层A related thread on this这里是StackOverflow
事实证明,此属性也适用于Z层
这将产生你所期望的结果。现在,如果要同时修改radius参数和颜色,可能需要将元素指定为两个字典,可以通过keyword argument expansion传入:
这将模拟crystal structure diagram for Sodium Chloride that might be found on Wikipedia(视图旋转以更清晰地显示结果)
相关问题 更多 >
编程相关推荐