这个问题实际上涉及到翻转,我将在下面这样概括:
我有一个2D 视图,并且在屏幕上的一个区域内有许多矩形。我如何将这些盒子展开,使它们不会彼此重叠,而只是以最小的移动来调整它们?
矩形的位置是动态的,并且依赖于用户的输入,因此它们的位置可以在任何地方。
附件 < img src = “ https://i.stack.imgur.com/3LVLK.jpg”alt = “ alt text”> 图像显示了问题和所需的解决方案
实际上,现实生活中的问题是翻转。
回答评论中的问题
矩形的大小不是固定的,并且取决于翻转中文本的长度
关于屏幕大小,现在我认为最好假设屏幕的大小对于矩形来说是足够的。如果有太多的矩形和算法不产生解决方案,那么我只需要调整内容。
“最小限度移动”的要求更多是为了美学而不是绝对的工程要求。可以通过在两个矩形之间增加一个巨大的距离来将它们分隔开来,但是作为 GUI 的一部分,这样看起来不会很好。这个想法是让翻转/矩形尽可能接近它的源(然后我将用一条黑线连接到源)。所以“移动一个 x”或者“移动两个 x 的一半”都可以。