能否用体素构建等边方锥?Python实现谢尔宾斯基金字塔技术疑问
关于体素构建等边方锥的问题
严格来说,数学定义上的等边方锥(侧棱与底面成45°角)确实无法用整数坐标的体素完美构建。因为你提到的高度公式:高度 = 底面边长 × √2 / 2,√2是无理数,无论底面边长取什么整数,计算出的高度都是非整数,而体素的坐标必须是整数,顶点无法精准落在整数格点上,自然没法用完整的体素搭建出严格符合数学定义的等边方锥。
不过针对你的需求(为谢尔宾斯基金字塔入门做准备),有几个实用的替代方案:
- 近似构建:选择接近理论高度的整数作为顶点z坐标。比如底面边长取10,理论高度≈7.07,就取z=7,这样搭建出的体素金字塔视觉上和等边方锥几乎无差别,完全满足入门需求。
- 调整“等边”定义:放弃欧氏距离的严格等边,改用体素友好的对称标准。比如让顶点到每个底面顶点的曼哈顿距离相等:假设底面顶点在
(0,0,0)、(a,0,0)、(a,a,0)、(0,a,0)(a为偶数),顶点设为(a/2, a/2, a/2),此时顶点到每个底面顶点的曼哈顿距离都是a/2 + a/2 + a/2 = 3a/2,完全对称,且所有坐标都是整数,体素可以完美拼接,视觉上也是规整的金字塔。 - 简化模型:如果只是为了练手谢尔宾斯基递归,直接用底面为正方形、高度为整数的对称金字塔即可,不用纠结严格的45°角,递归逻辑是一样的。
举个简单的Python代码示例,构建一个体素友好的对称金字塔:
def build_pyramid(base_length, height): voxels = [] half_base = base_length // 2 # 逐层生成体素 for z in range(height): # 当前层的x/y范围:从half_base - (height - z -1) 到 half_base + (height - z -1) offset = height - z - 1 start = half_base - offset end = half_base + offset + 1 for x in range(start, end): for y in range(start, end): # 确保坐标在底面范围内(可选) if 0 <= x < base_length and 0 <= y < base_length: voxels.append((x, y, z)) return voxels # 测试:底面边长4,高度2 pyramid_voxels = build_pyramid(4, 2) for voxel in pyramid_voxels: print(voxel)
这个代码生成的金字塔顶点在(2,2,2),每层的体素范围逐层缩小,对称且所有坐标都是整数,非常适合作为谢尔宾斯基金字塔的基础模型。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

