如何找到一个点是否在VTK中由2D非结构化网格定义的轮廓内?

时间:2017-08-01 12:34:36

标签: c++ vtk

在我目前的问题中,我希望能够检测到某个点何时在2D vtkUnstructuredGrid中。

我尝试使用vtkSelectEnclosedPoints制作一个vtkGeometryFilter并在我的unstructuredGrid上使用它。但是,vtkSelectEnclosedPoints类用于检查点是否位于曲面内,而不是位于轮廓内。因此,当我尝试在2D中应用它时,我发现我的点在我的网格之外,即使我知道它们位于内部。这是因为该类固有地在3D中工作。 是否有类似的类或方法可用于检测点何时在2D vtkUnstructuredGrid中?在打开网格之前,代码能够知道网格的维度(它是用户输入)。

2 个答案:

答案 0 :(得分:1)

所以你的"轮廓中的所有点" vtkUnstructuredGrid形成一个多边形?在这种情况下,您可以使用vtkPolygon类,请参阅示例here。如果您的非结构化网格是多个多边形,那么我仍然会使用相同的东西,只是遍历所有多边形。

答案 1 :(得分:0)

您可以根据2D网格创建vtkModifiedBSPTree,并为要测试的点执行光线投射(IntersectWithLine)。我把这个类用于三角形作为polydata的地形模型,它非常快速和可靠。