【发布时间】:2011-08-30 23:24:48
【问题描述】:
我有一个(大)水平滚动视图,还有一堆我想在上面放置的矩形。每个矩形都有一个所需的水平位置,但如果需要,它可以从那个位置变化到一定的量(一个常数,K)。矩形不得重叠。矩形的垂直位置是任意的(当然受限于视图的高度)。
理想情况下,我希望矩形的大小是可变的……我想如果这不可能,我可以使大小仅在一维上变化。
现在,这种布局会出现不可能的情况:由于只有一定的垂直空间,并且它们只能将 K 个像素从理想的水平方向移开,因此可能并非所有矩形都能够绘制出来。为了解决这个问题,每个矩形都有一个优先级(P),优先级较低的应该首先被忽略。 (您可以假设这是明确的,并且您始终可以判断任意两个矩形中哪个具有更高的优先级。)
我追求的是概念算法的东西,但如果你需要细节,这将在 iPad 上运行,并且需要考虑几千个(>1000 但
我见过像this 这样的算法,它可以实现不相交的技巧,但对于每个项目只允许移动一定数量的想法并不相同。显然,如果没有后一个约束,您可以显示所有项目,所以我还需要一些方法来知道在什么时候不再显示矩形。
如果解决所描述的问题太困难,我欢迎提出更务实的想法。如果所有其他方法都失败了,我总是可以按优先顺序做一些事情,如果可以的话,将每个项目渲染到所需的位置,如果不能,则尝试垂直移动它,如果仍然不能,则将其水平移动到允许的限制,在继续下一个之前。优先级排序意味着可能会找到一个次优的解决方案,但它会偏重于最重要的项目。
【问题讨论】:
-
一两张图片可以改善这个问题。
-
图像已创建。抱歉,很难描述:)