有几个问题非常接近这个主题,但没有一个真正帮助我。将一系列值分隔开,以便它们不重叠
我一直在编程一个图形库,我需要一个算法来垂直放置标签而不重叠。我已经坚持了几天,并设法将其提取到最基本的功能:
如果沿着Y轴给出一系列标签位置,比如说1 1 2 3 5 6 9
,以及一个上部和一个下限10
和0
分别我需要一种方法来空间出来的值,以输出1 2 3 4 5 6 9
333467
应234567
加权以接近原始坐标。
这也应该向后工作,如果值在规模的上端揉成,就应该我不是在寻找一个明确的答案蔓延尽可能(溢出之前)
,但我想就如何解决这个问题提供一些帮助。我完全卡住了。
最后一种思路是扫描所有可能发生碰撞的标签,并将它们定位为一个大块,并对齐到所有Y坐标的中心。但是如果有多组冲突,这将不起作用。
编辑:为了把这个算法在更大的背景下,看看这两款谷歌图表API饼图:
标签几乎弹性,他们通过连接在一起并将整个质量移动到质量中心来避免碰撞。
如果有人想看看实际的代码,该项目被称为mSVG和它的github – 2011-05-01 22:14:24