问题描述
我有一个3D模型的.obj和.ply文件。
我想做的是阅读此3D模型文件,并查看3D坐标列表是在3D模型空间之内还是之外。
例如,如果3D模型是半径为1的球体,则(0,0)将位于(True
的内部,而(2,0)将位于(False
的外部。当然,我使用的3D模型并不像球体那么简单。
我想添加一些我考虑使用的方法。 由于我使用的是Python,因此我考虑使用PyMesh,因为它们的交集功能看起来很有希望。但是,我拥有的坐标列表不是网格文件,而只是矢量,因此它似乎不是适合使用的函数。
我还发现了使用射线投射的this方法。但是,如何使用PyMesh或任何其他Python工具来做到这一点是我需要建议的。
解决方法
从3D点沿X轴投射一条射线,并检查与外部对象的相交点数。
根据每个轴上的交点编号(偶数或奇数),您可以了解您的点在内部还是外部。
您可能需要在Y和Z轴上重复以提高结果(有时您的射线与平面重合,并且相交数不可靠)。
,将我的评论转化为未来读者的答案。
您可以使用凸包库来检查点是否在包内。大多数库使用signed distance function
来确定该点是否在内部。 trimesh
是实现此功能的库之一。