c++ - 如何在不改变 X 位置的情况下堆叠矩形?

标签 c++ algorithm qt

我有一组矩形( QGraphicsScene 中的 QGraphicsRectItem ),其 X 位置是固定的,Y 位置可以修改。如果有任何重叠,我想堆叠这些矩形。矩形的位置可以通过移动/调整这些矩形的大小来动态更改,并且每次它都必须优化空间以便没有间隙。重要的约束是,当我们移动一个特定的矩形时,它必须堆叠矩形而不修改任何其他矩形的 X 位置。

我有一个简单的蛮力算法,它遍历所有矩形,然后获取碰撞矩形,为所有碰撞矩形增加 Y 位置和一些增量值。

这个问题有什么最优解吗?

最佳答案

您必须将每个矩形分配给一个级别,以便在给定级别上,没有两个矩形重叠。正确的?所以分配一个级别数组,为每个级别只包含一个矩形的最坏情况留出空间:

std::vector<int> LevelFreeAt (nRectangles) ;

当您遍历矩形列表时,LevelFreeAt[i] 将包含 i 层变为空闲的时间。现在对于每个矩形,按照开始时间的顺序,只需将其分配给在开始时间空闲的第一个级别,并相应地更新该级别的 LevelFreeAt 条目。

关于c++ - 如何在不改变 X 位置的情况下堆叠矩形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8499116/

相关文章:

c++ - C/C++错误:超出范围读取。寻找错误的内存地址

c++ - 如何添加自定义关键字以 clang 格式处理为 "class"?

查找唯一标识这些元素集合所需的最少元素的算法

c++ - QDateTime::secsTo 为不同的 QDateTime 返回相同的值

c# - C# 中等效的 C++ 格式占位符

c++ - 如何防止对象在编译时在不该删除的地方被删除?

algorithm - 维护数字的数据结构

c - 质数生成算法

c++ - 在 C++ 中快速将原始数据转换为十六进制字符串

c++ - 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?