计算最短距离

Calculating shortest distance

本文关键字:短距离 计算      更新时间:2023-09-26

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

在这样的时刻,我希望我在学校里能更多地关注数学。有人能帮我吗?这是针对Web应用程序的,我正在使用javascript。

首先确定两个框(左、右、上或下边缘(的潜在锚点。您可以对此进行简单的检查,例如:

如果另一个框的中心 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 种可能的组合,因此不妨跳过候选搜索并测试所有边的交集。

您还可以融合候选搜索和交叉点测试(生成候选组合搜索(。这使您可以选择可行的组合,在这些组合中可以更轻松地测试交叉点。