我有一个(大)横向滚动的视图,还有一堆矩形需要放置在上面。每个矩形都有一个期望的水平位置,但如果需要的话,它可以在一定范围内(一个常数K)变化。这些矩形不能重叠。矩形的垂直位置是任意的(当然要限制在视图的高度内)。
理想情况下,我希望这些矩形的大小是可变的……如果不可能的话,我可以只让它们在一个维度上变化。
现在,这种布局可能会出现无法实现的情况:由于垂直空间是有限的,它们只能在水平方向上移动K像素,可能并不是所有的矩形都能够被绘制出来。为了解决这个问题,每个矩形都有一个优先级(P),优先级较低的矩形应该首先被省略。(可以假设这是非歧义的,并且你总是可以知道任何两个矩形中哪一个的优先级更高。)
我需要的是概念性的算法,但如果你需要具体的内容,这将在iPad上运行,并且需要考虑几千个(>1000但<10,000)矩形。理想情况下,我希望每当用户改变缩放级别时都能够快速重新运行,但如果这不容易实现,我可以缓存位置。这些对象是时间线上的照片,我想让它们大致接近事件发生的时间——我是为了得到更多的照片而进行近似处理。
我看到过像这样的算法,可以避免重叠,但没有同样的想法,即每个项目只允许移动一定距离。显然,如果没有后一个约束条件,你可以显示所有项目,因此我还需要一些方法来知道什么时候不能再显示更多的矩形了。
如果按照描述解决问题太困难,我会欢迎一个更实用的建议。如果一切都失败了,我可以做一些事情,按优先顺序进行,如果可以的话,将每个项目呈现在其期望的位置上,否则尝试在垂直方向上移动它,如果仍然不行,则将其水平移动到允许的限制范围内,然后继续下一个。优先顺序意味着可能会找到一个次优的解决方案,但它会权衡最重要的项目。
理想情况下,我希望这些矩形的大小是可变的……如果不可能的话,我可以只让它们在一个维度上变化。
现在,这种布局可能会出现无法实现的情况:由于垂直空间是有限的,它们只能在水平方向上移动K像素,可能并不是所有的矩形都能够被绘制出来。为了解决这个问题,每个矩形都有一个优先级(P),优先级较低的矩形应该首先被省略。(可以假设这是非歧义的,并且你总是可以知道任何两个矩形中哪一个的优先级更高。)
我需要的是概念性的算法,但如果你需要具体的内容,这将在iPad上运行,并且需要考虑几千个(>1000但<10,000)矩形。理想情况下,我希望每当用户改变缩放级别时都能够快速重新运行,但如果这不容易实现,我可以缓存位置。这些对象是时间线上的照片,我想让它们大致接近事件发生的时间——我是为了得到更多的照片而进行近似处理。
我看到过像这样的算法,可以避免重叠,但没有同样的想法,即每个项目只允许移动一定距离。显然,如果没有后一个约束条件,你可以显示所有项目,因此我还需要一些方法来知道什么时候不能再显示更多的矩形了。
如果按照描述解决问题太困难,我会欢迎一个更实用的建议。如果一切都失败了,我可以做一些事情,按优先顺序进行,如果可以的话,将每个项目呈现在其期望的位置上,否则尝试在垂直方向上移动它,如果仍然不行,则将其水平移动到允许的限制范围内,然后继续下一个。优先顺序意味着可能会找到一个次优的解决方案,但它会权衡最重要的项目。