我正在寻找任何3d bin打包算法的确定性实现,即用于在一个或多个较大的内容中包装许多小的和不同的长方体。解决方案可能与最佳解决方案不同。
它应该用C,C ++,Java,C#,IronPython,IronRuby或任何其他可以从.Net代码中存储的语言编写。
我发现了这个C算法http://www.diku.dk/hjemmesider/ansatte/pisinger/3dbpp.c,但它不会旋转长方体以找到最合适的算法。我没有把它们颠倒过来,但水平旋转应该是可能的。
答案 0 :(得分:8)
我已经为你描述的情况编写了一个近似算法,即用C ++进行正交旋转的3D矩形框。 您可以在已发表的论文中找到结果和算法: http://www.cs.ukzn.ac.za/publications/erick_dube_507-034.pdf
答案 1 :(得分:2)
我将wknechtel/3d-bin-pack C代码转换为javascript。可以轻松移植到C#。
https://github.com/keremdemirer/3dbinpackingjs
您可以从Exception in thread "main" java.util.NoSuchElementException: No tags with key = SRF2 Key
at it.tidalwave.imageio.raw.Directory.getInteger(Directory.java:587)
at it.tidalwave.imageio.srf.SonySRFMakerNoteSupport.getSRF2Key(SonySRFMakerNoteSupport.java:34)
at it.tidalwave.imageio.srf.SonyMakerNote.loadAll(SonyMakerNote.java:120)
at it.tidalwave.imageio.tiff.TIFFImageReaderSupport.processMakerNote(TIFFImageReaderSupport.java:447)
at it.tidalwave.imageio.tiff.TIFFImageReaderSupport.processEXIFAndMakerNote(TIFFImageReaderSupport.java:404)
at it.tidalwave.imageio.tiff.TIFFImageReaderSupport.processMetadata(TIFFImageReaderSupport.java:380)
at it.tidalwave.imageio.raw.RAWImageReaderSupport.loadMetadata(RAWImageReaderSupport.java:591)
at it.tidalwave.imageio.raw.RAWImageReaderSupport.ensureMetadataIsLoaded(RAWImageReaderSupport.java:520)
at it.tidalwave.imageio.tiff.TIFFImageReaderSupport.loadImage(TIFFImageReaderSupport.java:186)
at it.tidalwave.imageio.raw.RAWImageReaderSupport.read(RAWImageReaderSupport.java:131)
at javax.imageio.ImageIO.read(Unknown Source)
at javax.imageio.ImageIO.read(Unknown Source)
at test3.main(test3.java:42)
文件运行示例计算并查看生成的报告。 index.html
文件包含应用和算法。我不确定该算法是如何工作的,但结果令人满意的包装计算。
答案 2 :(得分:1)
这个问题是NP难的。你最好的选择是一个近似算法(直到一个天才的人解决任何NP问题,或者一个非常幸运的人在一个解决方案中遇到困难。)不幸的是,我不知道任何熟知的近似算法。
答案 3 :(得分:1)
支持最大区域匹配的开源Java项目:here
以2D或3D旋转。
答案 4 :(得分:0)
该问题的一般版本在 “三维装箱问题的通用和机器人可包装变体算法:http://www.3dbinbox.com/Public/home/
答案 5 :(得分:0)