首页 > 解决方案 > 分布图像形成正方形的算法

问题描述

我正在构建一个从一系列图像创建精灵表的应用程序。目前,应用程序需要由用户指示列数,但我想添加一个自动建议此参数的选项,它允许获得几乎方形的 spritesheet。如果图像是正方形的,图像总数的平方根就足够了,但事实并非如此。图像必须全部相同,但可能高于宽度或相反。例如:sprite sheet 有一个行走的角色,每张图片高 331,宽 160。帧数为 25。我应该找到一种算法,该算法可以建议列(和行)的数量,使我能够获得尽可能正方形的表。不幸的是,我没有代码可以展示,因为我不知道该怎么做。

标签: algorithmlanguage-agnostic

解决方案


从数学上讲,这是一个有趣的问题。

我没有时间广泛考虑它,但这是我的两分钱:

让精灵的宽度和高度分别为wh,让精灵的数量为n

如果将它们放在由c列和r行组成的网格中,则网格的总宽度将为cw ,总高度为rh。您希望商cw / rh尽可能接近 1。

现在,如果您自由选择cr ,网格单元的数量N := cr可能会略大于n。在大多数情况下,我希望您接受最后一行部分为空。

由于N接近于n

等式 1

因此,我们想找到c使得

等式 2

尽可能小。显然,这发生在

等式 3

因此,如果您让列数 √( nh / w ) 四舍五入到最接近的整数,您可能会得到一个相当方形的网格。


推荐阅读