我有一个程序,用户可以在屏幕上放置两个方框。它们可以放在任何地方,我已经修复了一个函数来获得两个框的x2,x1,y2和y1的坐标。现在当用户放置两个盒子时,我想在box1的一个边的中间和box2的一边的中间画一条线。我想考虑双方之间的最短距离。因此,绘制的线总是在两个框的两边之间绘制,这将导致最短的线。
在这样的一点上,我希望我在学校里更加关注数学。有人能帮帮我吗?这是一个Web应用程序,我使用的是javascript。
答案 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种可能的组合,你也可以跳过候选搜索并测试交叉点的所有边缘。
您还可以融合候选搜索和交叉点测试(导致候选组合搜索)。这使您可以选择可行的组合,从而可以更容易地测试交叉点。