在画布上自动排列图像/矩形,重叠

时间:2013-05-08 21:14:03

标签: javascript html5-canvas

我希望在画布上随机排列一定数量的图像(或简单,矩形)。我还希望这些图像/矩形能够稍微重叠(边缘,边等),即我不希望任何图像完全覆盖另一个图像。这些图像/矩形平行于x和y轴。此外,我希望图像完全适合画布区域,没有未使用的空白区域。

我遇到了Bin Packing,Quadtree等。但这些都不允许重叠。 有没有人知道如何实现这一点?或者指向正确的方向?

谢谢 :)

1 个答案:

答案 0 :(得分:1)

假设指定的条件:

  • 没有未使用的空格
  • 轴对齐方向
  • 允许重叠的余量
  • 永远不会掩盖整个图像

我们可以使用Bin Packing或四叉树算法(或其他),但首先要操作数据集。

  1. 循环显示图片尺寸列表
    • 决定是否允许此图像重叠(用于调整所需的输出)
    • 增加要在首选算法(bin-pack / quadtree)中使用的维度数据(在边距内)(同时保留原始数据)
  2. 使用您选择的算法处理数据
  3. 对z顺序/渲染顺序进行排序(按随机排序,按区域排序等)
  4. 使用原始尺寸数据渲染图像 - 确保使用区域中心的原点,而不是角落
  5. 基本上,在排列集之前确定给定图像的重叠。

    我可以想到两个限制:

    1. 最小图像尺寸基于您允许的最大重叠。
      • 这可以通过从渲染顺序的最大值到最小值进行排序来解决。
    2. 根据您对图像的排序方式和画布的大小,您的图像可能无法填充画布 - 文件夹包装可能会留下一些空隙。
      • 这可以用更复杂的算法解决 - 我还没有用它们知道。
      • 您可以缩放图像以填充该区域 - 再次,我对此区域了解不足。