【问题标题】:How is 2D bin packing achieved programmatically?如何以编程方式实现二维装箱?
【发布时间】:2012-01-06 18:24:24
【问题描述】:

在 stackoverflow 上有一些类似的问题,但似乎没有一个提供对 NP-hard 问题和算法没有扎实理解的人可以理解的切实答案。

如何对矩形对象执行二维装箱?在我的情况下,我试图将几个图像组合成一个图像,用作精灵表,使用最少的空间。每个图像可能有非常不同的边界,但容器没有固定的边界。

我希望了解装箱算法的人能够解释如何以编程方式实现这一点,而不是提供装箱方法的一般概述。

【问题讨论】:

  • 我实际上非常彻底地阅读了那篇文章,虽然它确实提高了我对 bin 打包的理解,但它的示例实现在很大程度上依赖于仅在 C# 中可用的构造。即使阅读了提供的源代码,我也不知道他是如何完成一些必要的步骤的。

标签: algorithm bin-packing


【解决方案1】:

I Googled "bin packing code" 这是我的第一次点击:http://codeincomplete.com/posts/2011/5/7/bin_packing/

这里有一个总结:构建一棵二叉树。树中的每个分支都包含一个精灵。每个叶节点代表可用空间。最初,树只有根节点,它代表所有可用空间。要将精灵添加到树中,请在树中搜索一个足够大以容纳精灵的未占用(叶)节点。通过将精灵设置为节点的占用者并为节点提供两个子节点,将该节点从叶子变为分支。一个孩子代表精灵右侧的剩余空间;另一个代表精灵和第一个孩子下方的剩余空间。

我在上面链接的文章用图表和 JavaScript 代码更全面地解释了这一点。它还解释了如何动态增长精灵表,而不是预先选择固定大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多