没有代码,但我会从以下内容开始:
- 重新排列数字以了解三角形螺旋的结构
0
1 2
3 4 5
6 7 8 9
10 11 12 13 14
15 16 17 18 19 20
21 22 23 24 25 26 27
...
请注意,如果我们取完整的线并将它们重新排列成螺旋形,我们将得到完整的三角形。
- 添加坐标(希望我理解正确。)
0 0 0, 0
1 1 2 1, 0 0, 1
2 3 4 5 -1, 2 -1, 1 -1, 0
3 6 7 8 9 -1,-1 0,-1 1,-1 2,-1
4 10 11 12 13 14 3,-1 2, 0 1, 1 0, 2 -1, 3
5 15 16 17 18 19 20 -2, 4 -2, 3 -2, 2 -2, 1 -2, 0 -2,-1
6 21 22 23 24 25 26 27 -2,-2 ...
...
我还在前面加了一个行号r:三行在螺旋中形成一个完整的“转弯”。
你可以看到行内的坐标模式,这当然取决于它如何被3除:
- 可被 3 整除的行从
-r/3, -r/3 开始并递增 x
- 余数为 1 的行从
2*(r-1)/3+1, -(r-1)/3 开始,递减 x 并递增 y
- 余数为 2 的行从
-(r+1)/3, 2*(r+1)/3 开始并递减 y
- 找出我们实际上在哪一行
r 行中的最后一个数字 n 是“n = {sum i for i from 0 to r+1} = (r+1)(r+2)/2”。我们为r 解决了这个问题并到达:
r = -3/2 + sqrt(9/4 + 2n)
只有正解是相关的。
如果我们插入一个数字 n,比如 12,我们会得到 r = 3.6,这意味着我们在第 4 行的某个位置,请检查行号。
- 把东西放在一起
- 计算当前行号。
- 通过减去前一行的最后一个数字来计算行内的位置。
这通常是
n_prev = r*(r+1)/2,在n=12 的示例中是n_prev = 4*5/2 = 10。
示例行内的位置为pos = 12-10 = 2
- 计算当前行号除以 3 的余数。例如,我们有
4 = 3*1 + 1
- 现在通过选择适当的公式来计算坐标。例如,我们有行
4,余数1 和位置2,所以我们需要
[2*(r-1)/3+1, -(r-1)/3] + pos*[-1, 1] = [2*3/3+1, -3/3] + [-2,2] = [1,1]
再次,请检查您的初始螺旋三角形。