2012-03-30 57 views
3

找到凸包体和轴线对齐的箱体之间最近距离的最佳方法是什么?最近的距离是指船体和箱体上彼此最接近的一对点。我们可以假设我们知道我们知道船体和箱体不相交。船体和箱体之间的最近距离

船体由面,顶点给出,如有必要,我可以对面进行三角测量。

回答

5

这里的文章给出了一个算法来找到两个凸包之间最接近的对。 http://realtimecollisiondetection.net/pubs/SIGGRAPH04_Ericson_GJK_notes.pdf

有一段时间,我认为这可能是AABB会让这个算法变得不必要的一个壳体。不幸的是,我没有发现这是真的。

这个算法背后的想法是,你把两个船体的Minkowski差异。最接近的一对将是这个最接近原点的Minkowski差值中的一个点。 Cartheodory定理说,在d维空间中,只需要d + 1个点来表示船体中的一个点。所以基本上你选择了d + 1大小的闵可夫斯基差异集合,并找到距离原点最近的距离。通过迭代算法找到最接近原点的点。

0

对于船体的情况下的盒子(或任何其它对象凸)的内部:

如果它们不比船体的最近点相交。将所述船体的顶点,从未有一张脸的中间。

只需遍历船体的所有顶点并计算距离箱体的每一侧的距离,就可以找到一对点(箱体的顶点)。请注意,船体的表面与箱体的其中一个表面平行,您将在相同距离处获得多个表面。

赫尔外箱:

对包含在第二物体上的船体或盒和点的边缘的点。遍历船体和箱体的所有边,并计算与另一个物体的所有面的距离看起来像是一种方法,但应该存在更好的方法。

+2

不这样认为。设想一个AABB和另一个凸包,它是一个面朝盒子的盒子,它的面部最靠近盒子的一个角落。在这种情况下,最接近的一对是箱子的角落和船体表面上的一个点。 – 2012-03-30 07:25:45

+1

我认为最接近的一对将始终有一个箱顶点或船体顶点。然后,一种可能的解决方案是首先迭代箱顶点并找到最接近船体表面的距离。然后遍历船体顶点并找到最接近箱体面的距离。不知道它是否错过了一个可能性。 – 2012-03-30 07:27:24

+0

不知何故,我只考虑过一个箱子内的船体。如果箱子不包含箱体,那么你是对的,箱子顶点中的一个可能在箱子中。只有一个点必须是一个顶点 - 想象一个巨大的盒子,在盒子脸部中间旁边有一个小小的壳体。所以是的,你的建议是更通用的,看起来是正确的。 – 2012-03-30 07:34:04