非凸3D对象之间的距离

时间:2014-07-06 15:34:39

标签: c++ 3d geometry vtk

我目前正在使用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物体不相交,所以它们之间始终存在正的最小距离(但同样,因为物体是非凸的,我不能使用边界框(或者至少我想不出任何方式如何使用它们))。

1 个答案:

答案 0 :(得分:0)

  

我已经在几个页面上读到,无法以这种方式计算两个3D对象之间的最小距离[在两个输入对象的每个顶点 - 顶点对之间];这是正确的吗?如果是这样,为什么它不会这样工作?

我想知道同样的问题,这是一个例子,说明两个网格如何比它们的任何一个顶点对更近。 enter image description here

红点是最近点,不是顶点。

对不起,我不能说VTK的例子。