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

如何将STL几何体映射到3D矩阵并区分内外区域赋值?

将3D STL几何体转换为二值化3D矩阵(外部为1,内部为0)

以下是实现需求的完整MATLAB流程,基于你提供的STL模型导入代码,完成几何体到3D二值矩阵的转换:

步骤1:导入模型并确定网格范围

先导入STL模型,通过模型的边界框确定3D矩阵的覆盖范围:

% 导入STL几何体
gm = importGeometry("BracketWithHole.stl");

% 获取模型边界框,定义网格的最小/最大范围
bbox = boundingbox(gm);
x_range = bbox(:,1);
y_range = bbox(:,2);
z_range = bbox(:,3);

步骤2:定义3D矩阵分辨率并生成网格

根据精度需求设置矩阵各维度的点数,生成覆盖整个模型范围的网格点:

% 设置分辨率,可按需调整(数值越大精度越高,计算量也越大)
res = [60, 60, 60]; % x/y/z三个方向的点数

% 生成网格坐标
[X, Y, Z] = meshgrid(linspace(x_range(1), x_range(2), res(1)), ...
                     linspace(y_range(1), y_range(2), res(2)), ...
                     linspace(z_range(1), z_range(2), res(3)));

% 转换为N×3的点矩阵,适配pointInPolyhedron的输入格式
all_points = [X(:), Y(:), Z(:)];

步骤3:判断点的内外属性并构建二值矩阵

使用pointInPolyhedron函数判断每个网格点是否在几何体内部,按需求赋值(内部=0,外部=1):

% 判断每个点是否在几何体内部(内部返回true,外部返回false)
inside_flag = pointInPolyhedron(gm, all_points);

% 重塑为3D矩阵,反转逻辑得到外部为1、内部为0的结果
binary_3d_matrix = reshape(~inside_flag, res(1), res(2), res(3));

可选:验证结果可视化

通过切片视图查看生成的3D矩阵是否符合预期:

% 显示中间切片的二值分布
slice(binary_3d_matrix, res(1)/2, res(2)/2, res(3)/2);
axis equal tight;
xlabel('X 维度'); ylabel('Y 维度'); zlabel('Z 维度');
title('3D二值矩阵中间切片(0=几何体内部,1=外部)');

注意事项

  • 分辨率res可灵活调整:数值越大矩阵越精细,但计算时间和内存占用会同步增加
  • 若需要让矩阵范围超出模型边界,直接修改x_range/y_range/z_range的数值即可(比如x_range = [x_range(1)-1, x_range(2)+1])
  • 若模型包含多个独立部件,pointInPolyhedron会正确识别所有部件的内部区域

内容的提问来源于stack exchange,提问作者S B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:30:33