我正在尝试制作与 3d 网格中任何给定点直接相邻的坐标列表。例如,当给定向量 {3,3,3} 时,函数应返回以下列表:
[{4,3,3},{2,3,3},{3,4,3},{3,2,3},{3,3,4},{3,3,2}]
(花括号中的值是向量对象,而不是列表。)这是我的代码:
def touchingBlocks(sourceBlock):
touching = []
for t in range(6):
touching.append(sourceBlock)
touching[0].x += 1
touching[1].x -= 1
touching[2].y += 1
touching[3].y -= 1
touching[4].z += 1
touching[5].z -= 1
return touching
(sourceBlock 是一个矢量对象。)
但是,当我尝试修改列表中的任何一个对象时,它会修改每个对象。例如,在 touch[0].x += 1 命令之后,我希望 touch 等于:
[{4,3,3},{3,3,3},{3,3,3},{3,3,3},{3,3,3},{3,3,3}]
(假设我们给函数向量 {3,3,3})相反,每个对象的“x”值都发生了变化,而不仅仅是第一个。在函数结束时,此错误会导致简单地返回原始向量的六个副本的列表。
我认为这可能是因为列表中的对象只是指向同一版本的 sourceBlock 的指针,尽管我不确定。您能否确认我是否正确以及如何解决此问题?
此外,这里是矢量对象的链接,以防您需要查看: https ://www.dropbox.com/s/zpuo6473z225la7/vec3.py