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

Python trimesh使用x方向法向量生成截面结果异常如何解决

解决方案

你遇到的异常不是section方法取截面出错,而是to_planar默认自动拟合平面坐标系的逻辑不符合预期,导致投影后的2D坐标显示异常,x方向法向量的截面几何本身是正确的。

正确实现代码

import numpy as np
import trimesh

# 你原来的立方体创建代码
vert = np.array([[-200., -200.,    0.],
              [-200., -200.,   50.],
              [-200.,  200.,    0.],
              [-200.,  200.,   50.],
              [ 200., -200.,    0.],
              [ 200., -200.,   50.],
              [ 200.,  200.,    0.],
              [ 200.,  200.,   50.]])
fa = np.array([[6, 0, 4],
              [0, 6, 2],
              [4, 6, 5],
              [6, 7, 5],
              [6, 2, 7],
              [2, 3, 7],
              [2, 0, 3],
              [0, 1, 3],
              [0, 4, 1],
              [4, 5, 1],
              [7, 1, 5],
              [1, 7, 3]])
mesh = trimesh.Trimesh(vertices= vert, faces=fa)

# 取x法向量的截面
slice_ = mesh.section(plane_origin=(0,0,0), plane_normal=[1,0,0])

# 先判断截面是否存在,避免空值报错
if slice_ is None:
    raise ValueError("当前平面与网格无交集")

# 手动构造平面变换矩阵,指定3D空间的y/z轴对应2D投影的x/y轴,避免自动拟合出错
# 变换矩阵是4x4的齐次矩阵
transform = np.array([
    [0, 1, 0, 0], # 2D的x轴对应3D的y轴
    [0, 0, 1, 0], # 2D的y轴对应3D的z轴
    [1, 0, 0, 0], # 法向量方向对应3D的x轴
    [0, 0, 0, 1]
])

# 显式传入transform参数调用to_planar
slice_2D, to_3D = slice_.to_planar(transform=transform)
# 此时显示的2D截面就是预期的y从-200到200、z从0到50的矩形
slice_2D.show()

原旋转方案失效原因

你之前绕x轴旋转网格的方案逻辑上是可行的,但出错是因为旋转后网格的顶点z坐标范围不再是0-50,你依旧使用plane_origin=(0,0,0)取z法向量截面时,已经不在新网格的z轴范围内,要么取不到截面要么位置偏移,需要对应调整平面原点坐标。相比之下直接显式指定to_planar的变换矩阵是更简单、无额外计算开销的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:24:01