问题描述
所以我有一个封闭的网格和一个点。如何检查一个是否在另一个内部?
我试过了:
def is_inside(point):
points = pv.polyData([point,])
point_in_question = points.points[0]
select = mesh_model.select_enclosed_points(points)
inside = select.threshold(0.5)
if len(inside.points) >0:
print(len(inside.points))
print(f"inside atom {i}")
else:
print("outside")
但我在 len(inside.points)
中得到的不是 1 分而是 1000 多分。那么如何检查一个点是否在网格内?
解决方法
正如我在评论中建议的那样,您应该交换点查询网格和过滤器的闭合曲面:
import pyvista as pv
mesh_model = pv.Sphere()
points = [[0,0],[10,10,10]]
points_poly = pv.PolyData(points)
select = points_poly.select_enclosed_points(mesh_model)
现在 select
有 'SelectedPoints'
点数组,第一个点(内部)为 1,第二个点(外部)为 0:
>>> select['SelectedPoints']
array([1,dtype=uint8)
如果您收到有关表面未关闭的错误(如您在评论中所述),则意味着您的 mesh_model
未关闭。你可以检查
mesh_model.n_open_edges
对于流形网格应该是 0。