我目前正在使用VTK加载几个非凸面3D对象(多面体为vtkPolyData
),我想计算这些对象之间的最小距离。为此,我使用vtkSmartPointer<vtkDistancePolyDataFilter>
并将vtkPolyData
作为输入。
我的第一个问题是:我是否正确,这个方法计算两个输入对象的每个顶点 - 顶点对之间的距离(参见http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/DistancePolyDataFilter)?我已经在几个页面上读过,这样就无法计算出两个3D物体之间的最小距离;这是正确的吗?如果是这样,为什么它不会这样工作?
如果可以用这个例子计算两个物体的最小距离,那么我还有两个问题:
如何确定输入3D对象的点,距离对第二个输入对象的距离最小?换句话说,如何从distancePolyDataFilter-output获取最小距离的值?
编辑:我用另一个例子来测量两个vtkPolyData
的每个顶点 - 顶点对之间的距离,这样我现在可以访问第一个{{1}的点},与第二个vtkPolyData
的距离最小:
vtkPolyData
但我不知道如何得到第二个double vtkImplicitPolyDataDistance::EvaluateFunction(double x[3])
的点(最小距离的对应点)。
其次,有没有常见的方法来减少两个vtkPolyData
中的点集,这样我就不必计算/比较每个顶点 - 顶点对?对于我想要计算最小距离的每对3D对象,我可以粗略地确定它们相对于其他对象的相对位置。例如,我知道对象2在x方向上位于对象1之上。但由于物体是非凸的,我不能说物体1的最大x值小于物体2的最小x值。我也知道我的3D物体不相交,所以它们之间始终存在正的最小距离(但同样,因为物体是非凸的,我不能使用边界框(或者至少我想不出任何方式如何使用它们))。