计算打包算法结果的尺寸(边界框)
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;
我正在使用 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;