我很难创建一个算法来计算给定数量的顶点的位置,这样它们就会被展开以匹配我设置3D网格(真的是一个立方体)的分割数。 / p>
以下是更多详情:
我需要为3D网格(立方体)创建顶点:X轴为3行,Y轴为4行,Z轴为2行。
给定每个顶点=(x,y,z),顶点总数3 * 4 * 2 = 24,对于24个顶点中的每一个,我应该用(x,y,z)替换哪些值?< / p>
最初我在想的是:
vertices = [(0,0,0),(0,0,0),...] # fill the list with 24 vertices
然后迭代:
for i in range(vertices.length):
for x in range(3):
for y in range(4):
for z in range(2):
vertices[i] = (x,y,z)
return vertices
......沿着这些方向......
我还没弄清楚这一点。请问有人帮帮我吗?
答案 0 :(得分:1)
这是简短的代码,它返回一个与代码的明显意图相匹配的顶点列表。
from itertools import product
mylist = list(product(range(3), range(4), range(2)))
在iPython中打印mylist
会导致
[(0, 0, 0),
(0, 0, 1),
(0, 1, 0),
(0, 1, 1),
(0, 2, 0),
(0, 2, 1),
(0, 3, 0),
(0, 3, 1),
(1, 0, 0),
(1, 0, 1),
(1, 1, 0),
(1, 1, 1),
(1, 2, 0),
(1, 2, 1),
(1, 3, 0),
(1, 3, 1),
(2, 0, 0),
(2, 0, 1),
(2, 1, 0),
(2, 1, 1),
(2, 2, 0),
(2, 2, 1),
(2, 3, 0),
(2, 3, 1)]
如果您不了解product
的工作原理,请检查the documentation。
答案 1 :(得分:0)
您的解决方案似乎几乎是正确的,您只需要消除i
上的外部循环并直接附加到vertices
列表:
def grid():
vertices = []
for x in range(3):
for y in range(4):
for z in range(2):
vertices.append((x, y, z))
return vertices
print(grid())
或预先初始化列表并分配单个元素:
def grid():
vertices = [None]*3*4*2
i = 0
for x in range(3):
for y in range(4):
for z in range(2):
vertices[i] = (x, y, z)
i += 1
return vertices