我的情况是我动态地将一堆图标放在静态地图图像上,每个图标都由CSS定位,绝对定位。现在经常发生,两个甚至更多的点彼此太靠近,所以图标重叠,它们不再是可区分的。
我正在寻找一种算法来找到这些“彼此太接近”的点,然后将它们的图标展开,使它们不再相互重叠。
我正在考虑径向扩散,比如找到所有点太近的平均中点,然后将它们相对于那个点展开。
您可能知道这种问题的模式吗?
提前多多感谢。
答案 0 :(得分:1)
以下是一些可能解决您问题的解决方案:
使用closest pair of points problem的解决方案找到彼此最接近的两个图标。如果最接近的一对按照您的定义“太近”,您可以将它们彼此分开并重复此过程。
使用空间数据结构(如k-d树或R树)存储所有点。然后,您可以执行快速最近邻搜索,以找到彼此接近的点并将它们分开。
使用force-directed layout algorithm查找全局最小化某些能量函数的点的布局。像Fruchterman-Reingold这样的算法非常简单,可以编码并产生良好的效果。
希望这有帮助!