【发布时间】:2015-07-03 12:59:10
【问题描述】:
我有一个盒子对象数组,由它们的 (x,y,width,height) 属性定义,如下所示:
框 Q 锚定在角点 C。如何以编程方式扩展框 Q 以占用其所有可用空间,同时保持其纵横比?
通过将框扩展为非常大(从右上角)然后对齐到最远框的顶部边缘(在本例中为 5),我很幸运。如果此时其他框与 Q 重叠,我删除最远的框 (5) 并重复(对齐到 4 的顶部边缘),直到没有框重叠。这种方法的问题是一个框可能与 Q 重叠(下图中的框 2),但是当我缩放到它的顶部边缘时,它不再被包含,如下所示:
任何关于方法的想法将不胜感激,
乔什
【问题讨论】:
-
“如果有,我删除它们” --- 什么是“它们”?您不是要删除示例中的框 2 吗?
-
编辑澄清,谢谢。
-
除了顶边外,您还应该缩放以与右边缘相交,并检查哪一个实际相交,并选择较小的那个。在您的示例中,如果您通过扩展 Q 的底边以与 2 的顶边对齐来缩放 Q,则矩形不会相交。如果您通过扩展 Q 的左边缘来满足 2 的右边缘来缩放 Q,它们会相遇,所以这是实际的限制。如果两者都满足,请选择最小值。
标签: algorithm bin-packing