在空间中拟合对象的算法
Posted
技术标签:
【中文标题】在空间中拟合对象的算法【英文标题】:Algorithm for fitting objects in a space 【发布时间】:2011-10-04 15:32:12 【问题描述】:我有一组不同大小的正方形和矩形,我想使用 php 将它们组合成一个大正方形/矩形。这些方块通常是我想制作成蒙太奇的图像 - 但有时它们只是数学对象。
是否有任何 PHP 算法可以解决这个问题?这种类型的东西叫什么?
更新:经过更多搜索后,我想我想要的是 bin packing problem。但是,我还想为某些类型的打包问题(如图像)添加一定量的随机化,以引起人们的兴趣。
【问题讨论】:
这些对象的大小是否固定...即您想找到适合定义的“框”的图像范围。或者您想将这些图像(保留方面)缩放到预定义的框内? 我认为这个问题非常接近我所需要的:***.com/questions/4904049/php-array-performance 有算法,并且有针对特定语言(如 PHP)的这些算法的实现。我建议让这个问题与语言无关,因为它是 QI(很有趣)。 总是有math.stackexchange.com 让一些数学家参与其中。显然他们也讨论了一段时间:math.stackexchange.com search for the bin packing problem 看看服装行业,他们优先考虑在布料码数上优化尺寸奇特的样片,以及适合切割原木的木材行业。 【参考方案1】:2D Bin 打包是 NP-hard 问题。不过也有近似算法。
看看这段代码(和解释)。它包含多种算法,并且有一个 GUI:
Solving the 2D Packing Problem
【讨论】:
对不起-1,但链接的站点需要您注册并登录才能查看,这通常不是问题,但他们需要地址..公司,公司规模..等。不应该提供答案。【参考方案2】:我在 php 中编写了一个一维装箱算法。您想寻找最合适的、最合适的等等。但这不是二维问题,也许你想寻找背包问题?
【讨论】:
我找到了 PHP-version of the knapsack-problem,但我不确定它与要填充的 2D 区域有何关系。 @Xeon:至少你有一个包含 2 个变量的算法,重量和成本。也许你可以修改它?另一个应用是drools-planer。 问题是公式只使用一个约束和一个优先级。所以它只是一个美化的一维算法。我需要处理 2 个约束(具有可选优先级)的东西。 @Xeon:我明白了,你尝试过 Floyd-Warshall 算法还是 Edmond 的最大匹配算法? @Xeon:可能是空间索引还是四叉树?一个 si 将 2d 复杂度降低到 1d 复杂度。【参考方案3】:我认为您可以使用模拟退火算法。我用它用矩形广告填充矩形报纸页面。正如您所说,您可以通过随机解决方案开始它,然后您可以慢慢找到一个好的解决方案。见这里http://codetuner.blogspot.com/2010/03/simulated-annealing-approach-to.html。我用它来解决分页问题。我认为您也可以将其用于您的需求。
【讨论】:
以上是关于在空间中拟合对象的算法的主要内容,如果未能解决你的问题,请参考以下文章