平铺(可扩展)堆叠算法

obe*_*iro 8 algorithm tiles rectangles

这是问题所在.我有一个大小为1的矩形画布.因此它的坐标系为(0.0 ... 1.0 - x和0.0 ... 1.0 - y).

我也有一些瓷砖.瓷砖也是矩形.它们具有不同的尺寸,并且瓷砖的数量是变量.

我想在矩形画布中堆叠瓷砖,从0.0到1.0(从左到右,从上到下):

1)瓷砖必须适合画布(但尽可能多地填充空间)

2)瓷砖必须按比例缩放(如果它们不合适),每个瓷砖应按比例缩放(它们必须保持相同的比例).

3)想象你手中有这个"瓷砖",然后将它们一个接一个地放入这个画布中

4)它几乎像"TreeMap算法"但是 - 瓷砖的形状必须相同(矩形),我不需要填充画布的所有空间

这是我想要的

有没有人可以用任何C语言(C,C++,Java,C#)向我展示算法?

我试过这个.

1)我计算了瓷砖的面积,然后我计算了瓷砖面积的总和(例如:我有两个瓷砖,一个面积为2,其他面积为1,它们的意思是我的总和为3)

2)然后我计算每个瓷砖在"总面积"中的"比例"(例如:2/3和1/3)

3)然后通过Math.sqrt(x)计算矩形瓦片的大小(例如:Math.sqrt(2/3))

4)然后逐个绘制瓷砖......

但这总是不起作用.有时我会把瓷砖放在画布外面.*

Agn*_*kas 1

正如其他人指出的那样 - 问题描述不是很清楚。但我假设您可以根据需要缩放每个图块(至少您的示例表明图块缩放是可能的)。所以我的解决方案很简单(但可能不是您想要的也不是最佳的):

\n\n
    \n
  • 按因子缩放每个图块:
    边缘空间/ (边缘图块* N \xc2\xbd )
  • \n
  • 将每个图块放置在当前行中,如果图块超出空间限制 - 前进到下一行。
  • \n
\n\n

N是大于或等于瓷砖总数的最接近的完全平方数。

\n\n

ps 如果您需要在图块之间留出一些间距 - 只需将上述比例因子设置得小一点即可。

\n\n

希望有帮助。

\n