使用trimesh获取的最近点不在STL文件中,求技术解决方案
问题解答
核心误解澄清
trimesh.proximity.closest_point的第一个返回值不是顶点索引,而是最近点的三维坐标。这个点可以落在网格三角面的任意位置(顶点、边、面内部),不一定是STL文件中存储的顶点,所以你在STL的顶点列表里找不到对应索引是完全正常的。
解决方法:获取STL中存在的最近顶点
如果你需要的是STL文件里实际存在的顶点(即有对应索引的点),应该使用trimesh.proximity.closest_vertex函数,它直接返回最近顶点的索引:
# 获取最近顶点的索引和距离 closest_vertex_idx, d = trimesh.proximity.closest_vertex(mesh, [[-5,100,0]]) # 根据索引获取顶点坐标(该点一定在STL的顶点列表中) closest_vertex_coord = mesh.vertices[closest_vertex_idx[0]]
补充说明
STL文件的存储逻辑是记录每个三角面的三个顶点,但网格的几何最近点未必是顶点——当目标点的最近位置落在三角面的边上或内部时,closest_point会返回这个插值出来的点,自然不会出现在STL的顶点索引里。
内容的提问来源于stack exchange,提问作者Vishnu Panda
相关产品推荐
相关产品推荐

