如何找到polyData和一个方向点之间的距离?

时间:2012-03-29 08:21:07

标签: geometry computational-geometry vtk

我有一个观点,并为它定义了一个正常点。假设我也有一个polydata,它不包含或跨越这一点。

我想找到沿着polydata法线从这一点到polydata的距离。通过距离,我的意思是我应该在多大程度上平移点,以便它“接触”由polydata定义的表面。

这可能与vtk有关吗?

2 个答案:

答案 0 :(得分:2)

首先,我不是vtk或任何引擎包的专家。但你的第一个问题是纯粹的几何问题。首先,你应该将polydata所在的平面计算为该平面中的一个点(PlaneDefPoint)和一个平面法线(PlaneDefNormal)。 您可以通过计算从该平面上的三个点位置获得的两个向量的叉积来计算它(在这种情况下,来自您的多重数据的三个点)。

                   *  Point
PlaneDefNormal    /
               ^ /               
               |/
---------------*-------------------  Plane
         PlaneDefPoint

获得平面定义后。计算从平面定义点(PlaneDefPoint)到点的矢量,并用平面法线(PlaneDefNormal)计算该矢量(图中倾斜的一个)的点积。

答案 1 :(得分:1)

您可以检查与正常计算的分段的交点。方法vtkCellLocator :: InteresectwithLine将为您提供交叉点。这种方法的问题在于,如果片段太短",您将无法满足聚合数据。如果段是"太长",您可以将聚合数据相交两次,然后您必须小心交叉点以进行检索。 对于处理这种情况的更复杂的示例(通过使用vtkCellLocator :: FindCellsAlongLine),请参阅vtkSelectEnclosedPoints :: IsInsideSurface(http://fossies.org/dox/ParaView-v4.1.0-source/vtkSelectEnclosedPoints_8cxx_source.html)的实现