查找最近的可用空间而不与现有点发生碰撞

时间:2017-06-10 15:19:24

标签: javascript algorithm canvas geometry collision-detection

给定一组点,我正在寻找有关如何有效地找到给定宽度和高度(由红色框表示)到指定点(本例中的点4)的最近可用空间的想法。

enter image description here

同样给出了一组不同的点(如下所示),其中盒子不能紧挨着第4点,我仍然希望找到最近的空间(如图所示)。我判断点4与红框中心之间的距离“最接近”。

enter image description here

任何帮助或想法将不胜感激。

1 个答案:

答案 0 :(得分:0)

解决这个问题的关键是考虑到每个点将空间划分为四个(重叠的)半平面:北,南,西或东。

首先考虑参考点,矩形必须位于其北方或其南方等处,或者换句话说,在上面定义的一个半平面中。

让我们把它们想象成轴对齐的矩形,而不是半极性,这些矩形可能在无限中有一些边。

现在,对于这些边界矩形中的每一个,尝试将目标矩形放置在距离参考点最近的位置。如果它与任何点发生碰撞,则将该点处的边界矩形划分为四个新的边界矩形并重复。

所以,总结一下:

1)保留一个边界矩形队列,这些矩形按它们到参考点的距离排序。

2)获取第一个元素,看看你是否可以在那里拟合矩形,在距参考点最近的位置。如果可以,问题就解决了。

3)否则,在任何碰撞点划分边界矩形,并将得到的四个边界矩形推入队列(过滤掉那些太小的矩形)。

4)重复。