分而治之:
定义一种数据结构,代表一对折线以及它们的轴对齐最小边界框(AAMBB)之间的最小距离:pair = (poly_a, poly_b, d_ab)
。
为pair
数据结构创建一个空队列,使用距离d_ab
作为关键字。
创建一个初始折线对的pair
数据结构,并将其推入队列中。
我们将保留迄今为止找到的折线之间的最小距离(min_d
)。将其设置为无穷大。
重复:
从队列中弹出距离d_ab
最小的元素。
如果d_ab
大于min_d
,我们就完成了。
如果任何一个折线poly_a
或poly_b
只包含一个线段:
min_d
。否则:
将折线poly_a
和poly_b
分为两半,例如:
(1-7) --> { (1-4), (4-7) }
(8-12) --> { (8-10), (10-12) }
对两组进行叉乘,创建4个新的pair
数据结构,并将它们推入队列Q中。
平均情况下,复杂度为O(N * log N),最坏情况可能为O(N²)。
更新:用Perl实现的算法。