假设我有一些抽象的形状,每个都有宽度和高度(为简单起见,我们将它们设为矩形)。如何在定义宽度和高度的单个画布(只是一个术语,不一定是HTML5画布)上放置尽可能多的画面?
显然这是某种约束满足问题,但我真的不知道从哪里开始(除了蛮力)。谷歌搜索只会产生无关的结果(可能是因为我不知道要搜索什么)。什么是一个好的算法或什么是创建算法来做这个的好方法?
Fizz就是一个很好的例子。形状(在这种情况下为圆形)出现在组中,并且彼此不重叠,并且它们彼此保持不同。我的用例更像是一次性定位交易。另一个例子是SpriteRight,它在某些边界内尽可能有效地放置。
答案 0 :(得分:1)
您的问题可以从有限域上的约束逻辑编程中获益(clpfd)。
考虑Prolog constraint processing: Packing squares的问题和答案。它显示了几种方法,其中一种方法使用专用的placement constraints来查找2D中非重叠矩形的布局。
除了打包约束之外,clpfd还允许您强制执行附加约束。有免费(例如,SWI和YAP)和支持SICStus的商业(例如,prolog)clpfd实施。
答案 1 :(得分:0)
我找到了一个带有JavaScript和HTML5画布的open source example。随机生成矩形然后打包。但是,作者没有提到效率。
我还发现an article看起来很有希望。
答案 2 :(得分:0)
您还可以查看http://www.aimms.com/downloads/application-examples/circle-packing。这里使用数学编程/建模来解决圆形包装问题。还可以定义其他变体。约束编程http://www.aimms.com/cp中存在特殊的bin-packing约束。
一般而言,数学规划是解决此类问题的好方法。