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

Geometry 如何找到polyData与一个方向上的点之间的距离?,geometry,computational-geometry,vtk,Geometry,Computational Geometry,Vtk,我有一个点,和一个点法线。假设我还有一个polydata,它不包含或跨越这一点 我想找到从这一点到polydata法线的距离。通过距离,我的意思是我应该将点平移多远,以便它“接触”由polydata定义的曲面 * Point PlaneDefNormal / ^ / |/ ---------------*------------------- Plane

我有一个点,和一个点法线。假设我还有一个polydata,它不包含或跨越这一点

我想找到从这一点到polydata法线的距离。通过距离,我的意思是我应该将点平移多远,以便它“接触”由polydata定义的曲面

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

这可能与vtk有关吗?

首先,我不是vtk或任何发动机组件的专家。但你的第一个问题是纯几何问题。首先,应将polydata所在的平面计算为该平面中的点(PlaneDefPoint)和平面法线(PlaneDefNormal)。 你可以通过计算两个向量的叉积来计算它,这两个向量是从平面上的三个点得到的(在这种情况下,从你的多边形数据中得到三个点)


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

您可以检查与在法线上计算的线段的交点。vtkCellLocator::InterestectWithLine方法将为您提供交点。这种方法的问题是,如果线段“太短”,则无法满足多边形数据的要求。如果线段“太长”,可以与多边形数据相交两次,然后必须小心相交才能检索。
有关处理这种情况的更复杂示例(通过使用vtkCellLocator::FindCellsAllogline),请参阅vtkSelectEnclosedPoints::IsInsideSurface()的实现。

谢谢。我也有类似的方法。我计算了点法线并在这些法线方向上生成了线。我能够通过使用OBB树检测交点,然后计算距离。无论如何,感谢您的建议。此方法仅适用于“展平”多边形数据的曲面,而不适用于普通多边形数据的曲面。此处假定为二维曲面,因为没有明确询问3D,也没有问题的细节导致3D。