计算打包算法结果的尺寸(边界框)

Compute dimensions (bounding box) of packing algorithm result

我正在使用 this binary pack code. I'm using its GrowingPacker 方法。它工作正常,但我很难确定最终包的尺寸,我的意思是最终结果的边界框,如 (xMin, xMax, yMin, yMax)。找到它的最佳方法是什么?

我可以使用 x, y, w, h 的最终值来计算 this.root 的边界框吗?

我不确定它是否正确,但目前我正在使用类似 that loop 的循环来计算最终包的边界框(我使用的是 C++):

#include <cfloat> // For FLT_MAX

float minX = FLT_MAX;
float minY = FLT_MAX;
float maxW = - FLT_MAX;
float maxH = - FLT_MAX;

for (const Block &block : blocks) {

    if (block.fit) {

        if (block.fit->x < minX)
            minX = block.fit->x;

        if (block.fit->y < minY)
            minY = block.fit->y;

        if (block.fit->w > maxW)
            maxW = block.fit->w;

        if (block.fit->h > maxH)
            maxH = block.fit->h;

    }

}

要计算包含块列表中所有边界框的边界框,您需要找到最小和最大 X 和 Y,然后用它来计算整个边界框的宽度和高度。

计算较小框的最大宽度和高度将不起作用,因为这将是单个较小框的最宽和最高尺寸,不一定是整个边界框的尺寸包括所有这些。

float minX = FLT_MAX;
float minY = FLT_MAX;
float maxX = - FLT_MAX;
float maxY = - FLT_MAX;

for (const Block &block : blocks) {

    if (block.fit) {

        if (block.fit->x < minX)
            minX = block.fit->x;

        if (block.fit->y < minY)
            minY = block.fit->y;

        if (block.fit->x + block.fit->w > maxX)
            maxX = block.fit->x + block.fit->w;

        if (block.fit->y + block.fit->h > maxY)
            maxY = block.fit->y + block.fit->h;

    }

}

// now that you have the min/max of x and y, calculate overall w and h:
float w = maxX > minX ? maxX - minX : 0.0f;
float h = maxY > minY ? maxY - minY : 0.0f;