我正在尝试实现一个目标函数,它最小化了两个不规则形状的3D物体之间的重叠。虽然交集体积是最准确的重叠度量,但由于我处理的是具有1000多个面且不是凸面的复杂对象,因此计算成本太高。
我想知道是否有其他更快速计算的3D物体交集度量方法?度量的两个要求是:1.当度量为0时,没有重叠;2.度量应该是一个标量(而不是布尔值),表示重叠程度,但这个值不需要非常精确。
我正在考虑的可能的度量包括某种2D交集面积,或者1D穿透深度。或者,我可以使用基于样本的方法估计体积,在一个物体内采样点并测试存在于另一个物体中的点的百分比。但我不知道在复杂的3D形状内采样点以及测试点是否被这样的形状包围会有多大的计算成本。
我将非常感激在这个问题上的任何建议、代码或方程式。如果您能建议任何接受.obj、.ply等文件并执行3D几何计算的库(最好是Python库),那就太棒了!如果我找到一个好的方法,我也会在这里发布。
更新: 我找到了一个很好的Python库叫做Trimesh,它执行了我和其他人在这个帖子中提到的所有计算。它使用Blender后端计算确切的交集体积;它可以对网格进行voxelize并计算共占用的voxels的体积;它还可以在一个网格内执行表面和体积点采样,并测试点包含在另一个网格内。我发现表面点采样和包含测试(类似于表面交集)以及网格方法是最快的。
我想知道是否有其他更快速计算的3D物体交集度量方法?度量的两个要求是:1.当度量为0时,没有重叠;2.度量应该是一个标量(而不是布尔值),表示重叠程度,但这个值不需要非常精确。
我正在考虑的可能的度量包括某种2D交集面积,或者1D穿透深度。或者,我可以使用基于样本的方法估计体积,在一个物体内采样点并测试存在于另一个物体中的点的百分比。但我不知道在复杂的3D形状内采样点以及测试点是否被这样的形状包围会有多大的计算成本。
我将非常感激在这个问题上的任何建议、代码或方程式。如果您能建议任何接受.obj、.ply等文件并执行3D几何计算的库(最好是Python库),那就太棒了!如果我找到一个好的方法,我也会在这里发布。
更新: 我找到了一个很好的Python库叫做Trimesh,它执行了我和其他人在这个帖子中提到的所有计算。它使用Blender后端计算确切的交集体积;它可以对网格进行voxelize并计算共占用的voxels的体积;它还可以在一个网格内执行表面和体积点采样,并测试点包含在另一个网格内。我发现表面点采样和包含测试(类似于表面交集)以及网格方法是最快的。