2

可能重复:
将正方形打包成一个矩形

我需要计算最有效的方块尺寸会填满屏幕,

如果你看下面的图片,有不同的屏幕尺寸和平方数。我需要一种算法来计算x 轴平方计数和 y 轴平方计数,这将最有效地填充屏幕(填充正方形后将留下最小的空白区域)。

我看了下面的帖子,但这不是解决我问题的答案

将正方形打包成一个矩形

1 - 可以更改平方数(3-5-10 依此类推...)

2 - 屏幕尺寸可以不同

举些例子 ,

  • 在 1280 x 800 和 15 平方?

  • 在 800 x 480 和 12 个正方形上?

  • 在 600x1024 和 9 个正方形上?

  • 在 720x1280 和 45 平方?

** 我需要一个计算正方形宽度的算法(高度与宽度相同)**

如果您查看图像 3 和图像 3-1 之间的差异,您会发现图像 3-1 使用屏幕更有效,因为未使用的区域更少。

图 3 图 3

或者也许这是一种更好的填充方式:

图 3-1

图 3 - 1

如果您查看图像 4 和图像 4-1 之间的差异,您会发现图像 4-1 使用屏幕更有效,因为未使用的区域更少。

图 4

图 4

** 4. 图片必须如下图,因为屏幕上未使用的区域较少**

图 4-1 图 4 - 1

4

2 回答 2

1

我相信你所说的“有效”是正方形覆盖的面积越大越好。

让 :

a : x 轴平方数

b : y 轴平方数

s :正方形的大小(一侧的长度)

w : 屏幕宽度

h : 屏幕高度

c : 要放置的方格数

那么我们有

a * s <= w
b * s <= h
a * b >= c

通过这些不等式,可以找到 s 的上限。检查给出的第四个示例,其中 c = 20,w = 1280 和 h = 800

a * s <= 1280
b * s <= 800
a * b >= 20

a * b = (1280 / s) * (800 / s) >= 20 ---> s^2 <= (1280*800) / 20 ---> s <= 226,27..

有了 s 的上限,我们可以将 a 和 b 估计为;

a * s <= 1280 ---> a ~= 5,6568 b * s <= 800 ---> b ~= 3,53

对于这些值,不等式 a * b >= 20 不成立。

但是 a 和 b 都必须是整数。然后我们尝试 a 和 b 可以得到的 4 种可能性:

a = 5, b = 3 // round down both
a = 5, b = 4 // one down, one up
a = 6, b = 3 // one down, one up
a = 6, b = 4 // round up both

由于 a * b >= 20 第一种和第三种情况被消除为有效答案。下一步选择 a = 5, b = 4 的答案,因为它们的乘积更接近所需的平方数。

于 2012-12-28T15:36:26.217 回答
0

您正在寻找的是显示器的宽度和高度之间的最大公因数。

由于大多数显示器的比例为 4:3 或 16:9,因此最大公因数将为您提供可用于填充显示区域的最大正方形。

在您的 400 x 400 像素显示器中,最大公因数是 400,一个正方形将填满显示器。

在您的 1280 X 800 像素显示器中,最大公因数是 160。您需要 40 个正方形 (8 x 5) 来填充显示器。

如果要计算所有显示尺寸的最大公因数,答案是 1。每个像素都是一个正方形。您应该为要支持的每个显示尺寸计算一个单独的最大公因数。

于 2012-12-28T15:44:07.113 回答