计算正方形定位的公式

Formula to calculate square positioning

提问人:Eugene 提问时间:11/5/2023 最后编辑:Eugene 更新时间:11/6/2023 访问量:78

问:

我正在尝试如图所示排列正方形。每个方块都比前一个方块小一个常数值。在定位正方形时,我知道:

  1. 它的大小
  2. 大正方形的大小(正方形在中心)
  3. 相对于中心的指数,即 ...-2、-1、0、1、2...
  4. 实际指数,即 0,1,2,3,4...
  5. 缩进常量(当前平方小于前一个平方的值)

公式必须包含相对于中心的指数的乘法,因为正方形可以通过乘法来改变它们的位置。

我正在为它编写一些代码,但这并不理想。常量 (0.5) 是一个有眼球的值。

Float GetCardPosition(Int Index) {
    var Distance = CenterIndex - Index; // index relative to the center
    var Size = GetCardSize(index);
    var CardCenter = Size / 2;
    var Center = MaxWidth / 2;
    var CenterIndent = Indent / 2;
    var CardPos = Center - CardCenter;
    var Pos = (CardCenter + CenterIndent * Math.abs(Distance) * 0.5) * Distance;

    return CardPos - Pos;
  }
用户界面 数学 与语言无关

评论

0赞 Simon Goater 11/5/2023
如果 S_i 是第 i 个正方形的边长(对于 i >= 0),则 S_{i+1} = S_i - c,其中 c 是某个正常数。然后你知道 (i+1) 个正方形必须有一个位于第 i 个正方形中心右侧的 S_i/2 的中心。您可以只镜像另一方的结果。

答:

0赞 der da 11/6/2023 #1

我认为一个简单的观察会对你有所帮助。以平方数零开头的正方形的中心是 0、7、12、15、16(在相反方向上为负数)。这是 16 - 16、16 - 9、16 - 4、16 - 1、16 - 0。因此,第 n 个平方中心的简单公式是 f(n) = 16 - (4 - n)^2。

评论

0赞 Eugene 11/6/2023
这是一个很好的公式和解释。对于更通用的方法,要获得公式中的数字 4,我是否应该使用 16 的平方根(汇总宽度的一半)?
0赞 der da 11/7/2023
是的。另外,这里的 4 是中心正方形右侧(或左侧)的正方形数,包括中心正方形。如果你想知道中间有 1 个正方形,每边有 m-1 个正方形的排列的第 n 个正方形的中心,它是 f_m(n) = m^2 - (m - n)^2。这种正方形的边长应为 4m - 2 - 4n。