如何通过计算确定点在3D模型之内还是之外

问题描述

我有一个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是实现此功能的库之一。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...