求解凸包间的最近点对是几算几何中一个非常有用的算法,经常被用在谐如碰撞检测、物理引擎等图形学相关的领域,而且该算法的效率对于最终整个系统的效能有着相当关键的制约。常规的对于几何体之间的最近点对求解一般即是暴力的遍历算法,这种效率太过于低下,不具有普遍的适用意义,尤其是在一个较大的碰撞系统里边。因而,Lin以及Canny等人提出了渐进式求解的Lin-Canny算法。
Lin-Canny算法的主要用途即是求解两个凸包几何体间的最近距离(或最近点对等)。它的实现基础首先是将几何体元进行分类,即:点、边(三维线段)、面(有限面片),进而将两个凸包中的几何体元组成基本的几何体元对:点-点、点-边、点-面、边-边、边-面、面-面。如此一来,对于两个几何体之间的最近点对可能出现的位置即归结到了上述六种体元对之间。
LC的高效实现中,另外一个关键的概念即是三维Voronoi区域(3D Voronoi Area, VA),它是二维Voronoi区域的升维扩展。对于一种由基于几何体元组成的体元对A和B来说,A 的Voronoi区域即是指,在此区域内定可以获得B上到A的最近点对,而在此区域则不一定能得到这样的最近点对。Voronoi区域是LC算法相对于暴力遍历算法进行效率提升的一个重要基础。一般来说,对于凸包上的点所对应的VA就是由它所关联到的若干条边所对应的在该点上的垂面所包围而成,VA的方向为凸包在该点上由内向外的方向。对于每条边所对应的VA则是由四个平面包围而成,其中两个平面为该边所关联的两个面片在该条边处所对应的垂面,另外两个则是由该边的过其两个端点的垂面。对于组成凸包的面片所对应的VA则是由垂直于该面片且过组成该面片的几条边的平面包围而成。对于三维空间中的三种基本体元:点、边、面所对应的各自的Voronoi区域可见下图所示。