计算屏幕中的最大平方

时间:2012-12-28 14:21:05

标签: java android algorithm

  

可能重复:
  Pack squares into a rectangle

我需要计算最有效的方块大小才会填满屏幕,

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

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

Pack squares into a rectangle

1 - 可以更改平方计数(3-5-10等等......)

2 - 屏幕尺寸可能不同

例如,

  • 1280 x 800 15 square?

  • 800 x 480,12平方?

  • 600x1024,9平方?

  • 在720x1280上有45平方?

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

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

图片3 Image 3

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

图片3-1

Image 3 - 1

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

图片4

Image 4

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

图片4-1 Image 4 - 1

2 个答案:

答案 0 :(得分: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 ---&gt; s ^ 2&lt; =(1280 * 800)/ 20 ---&gt; s&lt; = 226,27 ..

对于s的上限,我们可以估计a和b为;

a * s&lt; = 1280 ---&gt; a~ = 5,6568 b * s&lt; = 800 ---&gt; b~ = 3,53

使用这些值,不等式a * b&gt; = 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的答案作为下一步,因为他们的产品更接近于所需的平方数。

答案 1 :(得分:0)

您正在寻找的是显示器宽度和高度之间的greatest common factor

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

在400 x 400像素的显示屏中,最大公因子为400,并且一个方格将填满显示屏。

在1280 X 800像素显示屏中,最常见的因素是160.您需要40个方格(8 x 5)来填充显示。

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