重新排列彼此太近的点

时间:2013-10-16 15:30:32

标签: javascript css algorithm design-patterns math

我的情况是我动态地将一堆图标放在静态地图图像上,每个图标都由CSS定位,绝对定位。现在经常发生,两个甚至更多的点彼此太靠近,所以图标重叠,它们不再是可区分的。

我正在寻找一种算法来找到这些“彼此太接近”的点,然后将它们的图标展开,使它们不再相互重叠。

我正在考虑径向扩散,比如找到所有点太近的平均中点,然后将它们相对于那个点展开。

您可能知道这种问题的模式吗?

提前多多感谢。

1 个答案:

答案 0 :(得分:1)

以下是一些可能解决您问题的解决方案:

  • 使用closest pair of points problem的解决方案找到彼此最接近的两个图标。如果最接近的一对按照您的定义“太近”,您可以将它们彼此分开并重复此过程。

  • 使用空间数据结构(如k-d树或R树)存储所有点。然后,您可以执行快速最近邻搜索,以找到彼此接近的点并将它们分开。

  • 使用force-directed layout algorithm查找全局最小化某些能量函数的点的布局。像Fruchterman-Reingold这样的算法非常简单,可以编码并产生良好的效果。

希望这有帮助!

相关问题