![](/img/trans.png)
[英]Hints with same-rectangles-in-rectangle packing algorithm with guillotine limitation?
[英]Packing Rectangles Algorithm
我需要解决以下问题:我有多个大小的矩形:宽度高度,宽度/ 2高度/ 2,宽度/ 4高度/ 4,宽度/ 8高度/ 8 ......等
我需要将这些矩形打包成一个大小为x * width y * height的大矩形,这样就不会有矩形重叠,矩形在包装中随机分布,任何矩形至少应该触及另一个矩形。 我尝试了一个相当基本的贪婪算法,但它失败了。
你能给我一些关于如何解决这个问题的建议吗?
谢谢!
编辑: 每种尺寸可以有多个矩形
这不是功课。 我正在尝试创建一个类似于ted.com效果的效果
随机意味着可能存在多个满足约束条件的矩形包装。 该算法在每次运行时不应产生相同的包装。
您可以使用空间索引或四叉树来细分2d平面。 这个想法是将2d问题减少到1d问题。 获得空间索引(或空间填充曲线)后,您可以将2d离散化为1d,您可以使用1d搜索相似性或从低到高排序或反向排序,例如长度。 如果您收到此订单,则可以将索引计算回2d表示并以最有效的方式将它们打包到您的容器中。 有很多方法可以制作空间索引。 一些最好但很难做的是希尔伯特曲线。 另一个是z曲线或莫顿曲线。 它与zizag曲线不同,因为它将平面细分为4个方格(不是矩形)。
编辑:这是一个Jquery-Plugin的链接: http ://www.fbtools.com/jquery/treemap/这里有世界流行: http ://www.fbtools.com/jquery/treemap/population.html
编辑: http : //people.csail.mit.edu/konak/papers/socg_2008-circular_partitions_with_applications_to_visualization_and_embeddings.html
在每一步中,您将新矩形的表面除以4。
SUM( [0,inf]中的n为1/4 n)= 4/3 **
因此,您可以做的最好的方法是将矩形适合于表面4/3(高度*宽度)的矩形
(这是一个下限)
@mloskot算法给出了一个可能的解决方案,它将在一个表面3/2 *(高度*宽度)的矩形中:这是一个例子:
我不知道你怎么能做得更好。
假设每个尺寸只有一个矩形,您可以尝试复制纸张尺寸的排列。 然后按大小从最大到最小排序矩形
我意识到描述可能不清楚,所以这里是提供解决方案的图片 - 它应该有助于掌握它:
这很像MIP映射
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.