二维最接近坐标的算法

问题描述 投票:1回答:1

我知道我做错了,但想不出解决这个问题的正确方法。我正在使用下面列出的12个点。 (1,2)(1,11)(7,8)(9,9)(12,13),(13,4),(20,8),(22,3),(23,12), (24,14),(26,7),(31,10)

我把它分成两个子集

左=(1,2)(1,11)(7,8)(9,9)(12,13),(13,4)

右=(20,8),(22,3),(23,12),(24,14),(26,7),(31,10)

进一步削减

左=(1,2)(1,11)(7,8)

RLeft =(9.9)(12.13)(13.4)

LRight =(20,8),(22,3),(23,12)

右=(24,14),(26,7),(31,10)

找到每组的最小距离。

左(1,2)(1,11)为9,(1,11)(7,8)为6.7,(1,2)(7,8)为8.48

分钟是6.7

左(9,9)(12,3)是6.70,(9,9)(13,4)是6.4,(12,3)(13,4)是1.14

最低点是1.14

LRight(20,8)(22,3)是5.38(20,8)(23,2)是5,(22,3)(23,12)是9.05

分钟是5

RRight(24,14)(26,7)是7.28(24,14)(31,10)是8.06(26,7)(31,10)是5.83

最低赔率是5.83

所以现在我有LLeft,RLeft,LRight和RRight。我需要找到的是LRLeft,RLLEft_Right(中间的值)和LRRight。这是我感到困惑的地方。我能想到获得LRLeft的唯一方法是采用LLeft和RLEft中的每个点并找到两者之间的距离。然后使用该距离并将其与LLeft和RLeft进行比较,这将给出左侧两点之间的最短距离。然后我为右和中心做同样的事情。我很确定有更快更好的方法,但我无法弄明白。

algorithm closest
1个回答
3
投票

你应该看看http://en.wikipedia.org/wiki/Closest_pair_of_points_problem#Planar_case

Here's a better resource for Step 4,但是为了让你开始:在递归中,如果我们已经分别在左右集合中有最小距离d1d2,那么如果有一对更近的点 - 其中一个来自左边,一个来自右集 - 然后我们只需要检查分界线的d距离内的点,其中d = min(d1,d2)

© www.soinside.com 2019 - 2024. All rights reserved.