假设我有一些抽象的形状,每个形状都定义了宽度和高度(为了简单起见,让它们成为矩形)。如何将尽可能多的它们放在一个定义了宽度和高度的 Canvas 上(只是一个术语,不一定是 HTML5 Canvas )?
显然这是某种约束满足问题,但我真的不知道从哪里开始(除了蛮力)。谷歌搜索只会出现不相关的结果(可能是因为我不知道要搜索什么)。什么是好的算法或创建算法来执行此操作的好方法是什么?
Fizz是一个很好的例子。形状(在本例中为圆形)成组出现并且彼此不重叠,并且彼此不受影响。我的用例更多是一次性定位交易。另一个例子是 SpriteRight ,在某些边界内尽可能有效地放置。
最佳答案
您的问题可能会受益于有限域 ( clpfd ) 上的约束逻辑编程。
考虑对 Prolog constraint processing: Packing squares 的问题和答案.它显示了几种方法,其中一种使用专用 placement constraints在 2D 中找到非重叠矩形的布局。
clpfd 还使您能够强制执行除打包约束之外的其他约束。有免费的(例如, SWI 和 YAP )和商业的(例如, SICStus )prolog支持 clpfd 的实现.
关于language-agnostic - 以编程方式定位形状——高效打包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9268708/