在包裹的2D空间

时间:2017-02-14 20:29:17

标签: algorithm 2d bounding-box

我有有限的2D空间,双向包裹坐标(我的意思是向左移动将绕到右边缘,同样向上/向下)。

我还有一组与轴对齐的盒子。这些框在空间内有浮动坐标。

问题:找到与包围所有框的轴对齐的最小边界框。边界框 CAN 被缠绕。

样品:

Sample 1 Sample2

(粉红色表示空间边界,红色框需要包围,蓝色边框表示最小可能的边界框)

2 个答案:

答案 0 :(得分:1)

可以使用扫描算法找到最大的垂直间隙,即最大的两条垂直线,它们之间没有框。

类似地,扫描算法可用于找到最大的水平间隙。显然,两个间隙都可以环绕边缘。

通过从2D空间中移除间隙而留下的形状是包含所有框的最小边界框。我不确定是否保证所有包含框的最小区域,但是不存在两个尺寸小于此值的边界框。如果它存在,它将定义两个间隙(垂直和水平)都大于最大间隙。

扫描检测两个间隙可以在O(N * log N)中完成,其中N是方框数。

答案 1 :(得分:1)

边界框包围的总面积百分比为:

由边界框包围的总面积的百分比=(由水平边界包围的水平范围的百分比)*(由垂直边界包围的垂直范围的百分比)

显然考虑到包装。因此,您可以独立地最小化水平和垂直边界,以便最小化总面积。

要最小化水平边界,您需要找到一个矩形的右边缘与下一个边缘的最大间隙。您可以通过将所有边(左侧和右侧)排序到单个列表中并对其进行迭代来有效地执行此操作,在向左移动时递增计数,在向右移动时递增递减计数。当计数从0开始时,你的最大差距是x值的最大差异 - > 1.你必须专门处理环绕式外壳,你可以通过水平重复一次矩形,偏移总面积的宽度来轻松完成。在开始时初始化计数时,您还必须考虑缠绕的矩形。

然后对垂直边界做同样的事。