三维网格算法

时间:2018-02-16 19:40:04

标签: python math 3d

我很难创建一个算法来计算给定数量的顶点的位置,这样它们就会被展开以匹配我设置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

......沿着这些方向......

我还没弄清楚这一点。请问有人帮帮我吗?

2 个答案:

答案 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