我的情况是,我在静态 map 图像上动态定位一堆图标,每个图标都通过 CSS 进行绝对定位。现在经常发生,两个甚至更多的点彼此太近,所以图标重叠并且它们不再区分。
我正在寻找一种算法来找到这些“彼此太近”的点,然后以不再相互重叠的方式展开它们的图标。
我在考虑径向分布,比如找到所有距离太近的点的平均中点,然后将它们相对于该点展开。
您可能知道此类问题的任何模式吗?
非常感谢。
最佳答案
以下是一些可能会解决您的问题的解决方案:
使用 closest pair of points problem 的解决方案找到彼此最接近的两个图标。如果根据您的定义,最近的一对“太近”,您可以将它们彼此分开并重复此过程。
使用像 k-d 树或 R-树这样的空间数据结构来存储所有的点。然后,您可以执行快速最近邻搜索以找到彼此靠近的点并将它们移开。
使用 force-directed layout algorithm找到全局最小化某些能量函数的点的布局。像 Fruchterman-Reingold 这样的算法非常容易编写代码并产生良好的结果。
希望这对您有所帮助!
关于javascript - 重新排列彼此太近的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19407578/