我正在构建一个解决方案,以便最有效地将多个对象放入一个盒子中。我希望尽快实现更有效的算法,但首先要开始使用强力方法,检查每个可能的位置。现在这很好,因为盒子很小,只有很少的物品。之后,复杂性将会增加。
我使用Unity允许用户查看项目最终如何适合框中。我最初的想法是使用Unity的物理和碰撞检测来实现最佳拟合算法;但是,有很多潜在的位置和位置需要检查,这是一个糟糕的方法吗?我在数据结构中运行算法要好得多吗?一个10x10x10的盒子甚至有三个1x1x1物体,可能有近十亿个位置......
我是Unity的新手,所以欢迎任何建议;谢谢!
更新:对,所以这个问题肯定在bin-packing问题集中,我知道NP难。我假设一个长方形的盒子,里面装满了随机尺寸的矩形盒状物品。
我的问题是:根据我的特定算法,当我们问,"目前有什么东西在这个x,y,z空间?"通过代码解决这个问题,或者将Unity对象与碰撞检测结合使用会更有效。
根据我所看到的答案,我可以看到使用Unity效率极低。
答案 0 :(得分:2)
如果你真的想知道:
"目前x,y,z空间中有什么东西?"
最好的方法就是简单地使用Unity的引擎。因此,您通常会检查AABB以查看其中是否有一个点(或者只是检查交叉点)。您可以使用其中一种
我知道问题 "目前有什么东西在这个x,y,z空间?" 是或者可能是 计划的任何解决方案的一个重要部分。事实上最好的方法就是让Unity的引擎做到这一点。你或者我可以写任何有效的东西是绝对不可能的 - 从它开始就是GPU中的四元数云。
实际答案 现在声明 具体问题。
现在关于更普遍的问题,我首先完全解释了当你问这个问题时:)
以下是我对琐碎的盒子包装的一些想法" 2D 中的算法,在视频游戏中有用的级别。
https://stackoverflow.com/a/35228592/294884
关于3D"盒装"除非你包括你想要做的事情的屏幕截图并完全解释所涉及的形状和限制,否则绝对不可能提供任何指导。
如果你是一位数学家并且正在寻找关于这个问题的最新算法思考,那么只需谷歌就像" 3d盒子打包算法"
再次,读者在这里完全不知道你正在处理什么形状/等,所以请点击编辑并解释!
另外请注意 sphere 包装是一个非常有趣的科学问题,如果这就是你所说的:
https://en.wikipedia.org/wiki/Close-packing_of_equal_spheres