项目放置的算法

时间:2013-08-20 17:13:15

标签: algorithm logic tooltip

我有一个“复杂”的问题,我在元素(黑色)上面有一堆工具提示(橙色)可以随机放在屏幕上。工具提示是一个大的正方形,在其中一个边的中间有一个三角形,指向元素方向。默认情况下,三角形将位于元素的中间,但只要它保持接近就可以移动,所以我们不能轻易理解它引用这个元素而不是另一个元素。

问题是,工具提示不能相互重叠,也不能超出屏幕。

Image of my tooltip problem

我考虑过首先将每个工具提示放在默认位置(三角形朝下),然后检查它们是否在屏幕外或与另一个重叠,如果是,请尝试其他位置。但是使用这种技术(可能是最简单的技术),我不能保证最好的位置,因为一旦放置了工具提示,如果另一个不适合任何地方,我将不会取代他,否则它会变得太复杂。

是否有人有任何提示/想法如何处理此类问题?

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用某种排斥电荷的物理模拟放置所有工具提示,类似于某些algorithms用于绘制图形的操作。您可以将每个工具提示建模为一个附有软弹簧的对象到其黑盒子,同时模拟所有工具提示之间以及工具提示和图像边缘之间的强排斥力。您计算所有力并迭代移动工具提示,直到所有位置收敛。您可以将力量比例设置为反平方,反向立方体等,以找到不错的结果。

这可能需要付出一些努力才能实现,但对于简单的案例应该可能会给出不错的结果。可能无法保证始终存在一个好的解决方案,因为如果添加太多工具提示,您的图像就会满了。

答案 1 :(得分:1)

这看起来像地图标签问题的一个实例。维基百科有an article about it