二维尺寸、数量和包装算法?

2D Dimensions, quantities and packing algorithms?

一直在网上寻找并改变我对问题的措辞以找到类似的东西,但不完全确定如何在 Java 中正确地解决这个问题。我有一个 web 应用程序,它采用 (A x B) 的二维维度,然后我转到我的数据库并检索维度大于或等于 (A x B) 的所有项目。然后我找到最好的成本项目和 return 以及总乘以请求的数量。

但是现在,如果我有一件 1000 x 1000 的便宜货,但我要求 10 件 100 x 100。1000 x 1000 将 returned 因为它是最好的成本,但我然后我将总数设置为 1000 x 1000 的 10,这太多了。

无论它是什么,如何最好地采用那个大尺寸,并尝试找出可以从中拆分出多少个请求的尺寸,并将总 x 数量降低到一个更智能的数量?

希望这是有道理的。

到目前为止,我已经试过了

private Double FindSmartTotal(double cheapestTotal, String sizeDB, String desc, Integer quantity) { 
    desc = LookForSizes(desc);
    if(desc!=null){
        LookForSizesOfDB(sizeDB);
        LookForSizesOfDescription(desc);
        Dimension d1 = new Dimension(dbitemSizeA, dbitemSizeB);
        Dimension d2 = new Dimension(homeviewitemSizeA, homeviewitemSizeB);
        if(d1.getWidth() > d2.getWidth() && d1.getHeight( )> d2.getHeight()){
            double dividedWidth = d1.getWidth()/d2.getWidth();
            double dividedHeight = d1.getHeight()/d2.getHeight();
            double roundedWidth = round(dividedWidth,1, BigDecimal.ROUND_HALF_UP);
            double roundedHeight = round(dividedHeight,1, BigDecimal.ROUND_HALF_UP);
            System.out.println("here");
        }
    }
    return null;
}

但我不知道接下来我会做什么,或者是否有更好的方法来处理它并为新代码废弃上面的代码。

想通了这一点。更多基于数学。

将两个维度相乘得到每个维度的面积。

然后for循环,每次循环从较大的区域中减去较小的区域并递增一个计数器。这样做直到减法大于 0。这将提供比从更大面积切割的数量。