各位, 有兴趣来讨论个小算法吧

有几个预制体, 他们的宽高都是100的倍数的矩形, 比如100x200,100x300,200x400,400x100 等.
想实现的是: 在一个800x1000的面板上, 随机摆放以上那些预制体, 允许有空隙, 但不能超出.

我的想法是, 每个预制体, 都用数组来表示
比如 100x100 就是[1]
200x100 就是[2,2]
100x200 就是{[3],[3]}
400x200 就是{[4,4,4,4],[4,4,4,4]}
数组里面的数字, 表明是哪个预制体的编号
面板也是一个多维数组

然后随机从 矩形的预制体库 里, 拿出对应的数组, 放到面板数组里, 把面板数组里的值改为对应的编号数字.

显示的时候, 就根据那个编号, 直接获取预制体, 根据下标, 计算出来坐标. 然后再放到界面上.

这个写起来感觉有点难受.
不知道各位大佬们有没有什么思路啊.

我觉得没啥问题啊
不过如果是我写的话,会把矩形左上角格子作为矩形的锚点记录编号,矩形其他位置记录到本矩形左上角的偏移量。这样检索的时候会更方便一些。

没啥兴趣。。买杯奶茶先,abcd4种组合excel画下。变成了求多元一次方程的结果集+结果集排序+结果集排序有效性验证。
image
d最多只能由2排 4*2=8个。

打开chrome随便输入几行

,3405种组合。

再用分治法,把这3405种组合跑一边试试。

1赞

Dancing Link

确实会好一点.
我是觉得我的方法比较繁琐笨重, 才来问问有没有更高效率的 :rofl:

你这个… 感觉太固定了. 要新增不同的矩形, 就都要重写了吧.
而且好像并没有随机呢.

我查了一下, 但好像不是很匹配.

可以参考一下texturepacker

你这么一说, 好像是有这么个意思.
唯一有一点差异的是, texturepacker 是要尽量的把空间利用完, 所以应该会通过类似遍历的方式, 尝试把空间都塞满.
我这个在这方面不那么严格.

texturepacker可以切换算法的