计算最短距离

时间:2016-02-16 08:05:38

标签: javascript algorithm math

我有一个程序,用户可以在屏幕上放置两个方框。它们可以放在任何地方,我已经修复了一个函数来获得两个框的x2,x1,y2和y1的坐标。现在当用户放置两个盒子时,我想在box1的一个边的中间和box2的一边的中间画一条线。我想考虑双方之间的最短距离。因此,绘制的线总是在两个框的两边之间绘制,这将导致最短的线。

在这样的一点上,我希望我在学校里更加关注数学。有人能帮帮我吗?这是一个Web应用程序,我使用的是javascript。

1 个答案:

答案 0 :(得分:2)

首先确定两个方框(左边,右边,顶边或底边)的潜在锚点。你可以做一个简单的检查,例如:

如果另一个框'中心x坐标小于当前框'较小的x坐标,则左边是潜在的锚点。

如果另一个框的中心y坐标大于当前框'更大的y坐标,则下边是潜在的锚点。

等等......

在此之后,您有两个方框的候选人列表。实际锚点可以计算为边缘的中心(( (edgeLeft + edgeRight) / 2, (edgeTop + edgeBottom) / 2))。现在,您需要检查哪个组合导致最短的线。迭代每个候选人:

for each candidate1 in candidates of box 1
    for each candidate2 in candidates of box2
        ...

现在检查组合是否会产生交叉点。例如。如果candidate1是左边缘且candidate2具有更大的x坐标,则存在交叉点。跳过导致交集的组合。

从其他组合中,计算线的长度(实际上是平方长度:(candidate1.x-candidate2.x)^2 + (candidate1.y-candidate2.y)^2)。记住最短的一条,你就有了最佳的连接线。

由于每个盒子只有4个锚点,导致16种可能的组合,你也可以跳过候选搜索并测试交叉点的所有边缘。

您还可以融合候选搜索和交叉点测试(导致候选组合搜索)。这使您可以选择可行的组合,从而可以更容易地测试交叉点。