如何检查单个点是否在pyvista中的表面内?

问题描述

所以我有一个封闭的网格和一个点。如何检查一个是否在另一个内部?

我试过了:

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。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...