我正在尝试使用 Trimesh 计算两个凸网格的交集体积。使用trimesh.Trimesh.intersection()方法,即使是基本的、明显重叠的形状也会返回一个空的交集。
作为一个简单的例子,我尝试计算两个框彼此偏移的交集。
# Create offset transformation matrix
T = np.eye(4)
T[:3, 3] = np.array([0.5, 0.5, 0.5])
# Form basic box meshes
mesh1 = trimesh.creation.box(extents=[1.0, 1.0, 1.0])
mesh2 = trimesh.creation.box(extents=[1.0, 1.0, 1.0], transform=T)
# Calculate intersection
test_intersection = mesh1.intersection(mesh2)
print(test_intersection)
print(test_intersection.volume)
# Visualize
scene = trimesh.Scene([mesh1, mesh2])
scene.show()
结果输出表明两个形状之间存在空交集:
<trimesh.Trimesh(vertices.shape=(0, 3), faces.shape=(0, 3))>
0.0
然而,观察这些盒子,它们显然是重叠的:
为什么网格交点是空的?我是否误解了 .intersection() 方法的使用?
(我使用的是python 3.12.7,从pip安装的trimesh 4.5.2)
我通过安装附加依赖项解决了我的问题
pip install manifold3d
我在查看了 trimesh.Trimesh.intersection 方法的源代码并看到以下文档字符串后进行了尝试:
Parameters
------------
other : trimesh.Trimesh, or list of trimesh.Trimesh objects
Meshes to calculate intersections with
engine
Which backend to use, the default
recommendation is: `pip install manifold3d`.