You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python将表示高度的2D整数数组转换为STL格式文件

2D高度数组转STL文件的Python实现方案

可以直接用Python实现转换,我们可以借助numpy处理高度数组,numpy-stl库生成STL网格模型,具体实现如下:

依赖安装

先安装所需的第三方库:

pip install numpy numpy-stl

实现思路

  • 把2D高度数组的行、列索引对应到XY平面的坐标点,对应位置的数值作为该点的Z轴高度
  • 给每一组相邻的四个网格点生成两个三角面,拼接成完整的地形网格
  • 如果有3D打印需求,可以额外补充侧面和底部三角面,生成闭合实体模型

完整可运行代码

import numpy as np
from stl import mesh
from random import randint

# 生成示例中的100*100随机高度数组
grid_size = 100
height_arr = np.zeros((grid_size, grid_size), dtype=int)
for i in range(grid_size):
    for j in range(grid_size):
        height_arr[i][j] = randint(100, 255)

# 初始化网格:每个网格对应2个三角面,总面数为2*(grid_size-1)*(grid_size-1)
face_count = 2 * (grid_size - 1) * (grid_size - 1)
terrain_mesh = mesh.Mesh(np.zeros(face_count, dtype=mesh.Mesh.dtype))

# 遍历生成所有三角面
for i in range(grid_size - 1):
    for j in range(grid_size - 1):
        # 取当前网格的四个顶点坐标
        v1 = [i, j, height_arr[i][j]]
        v2 = [i+1, j, height_arr[i+1][j]]
        v3 = [i+1, j+1, height_arr[i+1][j+1]]
        v4 = [i, j+1, height_arr[i][j+1]]
        # 第一个三角面
        terrain_mesh.vectors[2 * (i * (grid_size-1) + j)] = np.array([v1, v2, v3])
        # 第二个三角面
        terrain_mesh.vectors[2 * (i * (grid_size-1) + j) + 1] = np.array([v1, v3, v4])

# 导出为STL文件
terrain_mesh.save('height_terrain.stl')

注意事项

  • 上述代码生成的是开放的单面地形网格,如有实体需求可以自行补充底部和侧面的三角面
  • 可以根据实际需求调整XY轴的缩放系数,避免模型比例失衡
  • 高度值可以自行做缩放处理,不需要局限在100~255的区间

内容的提问来源于stack exchange,提问作者Jakub Świniarski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 04:15:04