我有一组矩形( QGraphicsScene 中的 QGraphicsRectItem ),其 X 位置是固定的,Y 位置可以修改。如果有任何重叠,我想堆叠这些矩形。矩形的位置可以通过移动/调整这些矩形的大小来动态更改,并且每次它都必须优化空间以便没有间隙。重要的约束是,当我们移动一个特定的矩形时,它必须堆叠矩形而不修改任何其他矩形的 X 位置。
我有一个简单的蛮力算法,它遍历所有矩形,然后获取碰撞矩形,为所有碰撞矩形增加 Y 位置和一些增量值。
这个问题有什么最优解吗?
最佳答案
您必须将每个矩形分配给一个级别,以便在给定级别上,没有两个矩形重叠。正确的?所以分配一个级别数组,为每个级别只包含一个矩形的最坏情况留出空间:
std::vector<int> LevelFreeAt (nRectangles) ;
当您遍历矩形列表时,LevelFreeAt[i]
将包含 i
层变为空闲的时间。现在对于每个矩形,按照开始时间的顺序,只需将其分配给在开始时间空闲的第一个级别,并相应地更新该级别的 LevelFreeAt
条目。
关于c++ - 如何在不改变 X 位置的情况下堆叠矩形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8499116/