![]() |
1
2
注:我不太明白Ric的答案,所以我自己解决了这个问题,并提出了看起来相同的解决方案。我想我还是解释一下我做了些什么,以防有用。 首先,我规范化了视图和项目的纵横比。(我假设您不想旋转项目。)
现在填充一个宽高比的矩形
在哪里?
将这两个方程相乘/相除得到
如果网格是完美的,
|
![]() |
2
1
您的解决方案可以很容易地改进以处理一般情况: 如果我们(临时的)忘记了行和列的整数的需要,我们有 行*列=n x= aTy*y aview=行*x=行*aitem*y 1=列*Y=(n/行)*(aview/[aitem*行])=n*aview/(aitem*行2;) 因此rows=sqrt(n*aview/aitem)和columns=n/rows=sqrt(n*aitem/aview) 然后,CEIL(行)和CEIL(列)是一个解决方案,而floor(行)和floor(列)太小,不能一起成为解决方案(如果行和列不是整数)。这留下了3个可能的解决方案:
编辑 修正方程式。第一个结果是错误的(见注释) |
![]() |
3
0
问得好。如果视图的尺寸为A x B(固定),而项目的尺寸为A x B(可变,要最大化),则需要:
不过,我不知道如何解决这个问题——TRUC是一个棘手的部分,因为它是非线性的。 |