例如,假设你有一个6边的正方形矩阵。 这些是笛卡尔指数:
(0,0) (0,1) (0,2) (0,3) (0,4) (0,5)
(1,0) (1,1) (1,2) (1,3) (1,4) (1,5)
(2,0) (2,1) (2,2) (2,3) (2,4) (2,5)
(3,0) (3,1) (3,2) (3,3) (3,4) (3,5)
(4,0) (4,1) (4,2) (4,3) (4,4) (4,5)
(5,0) (5,1) (5,2) (5,3) (5,4) (5,5)
6边正方形有3个环:A
A A A A A A
A B B B B A
A B C C B A
A B C C B A
A B B B B A
A A A A A A
问题什么函数可以获取单元格的坐标,即正方形的N边,并相应地返回环值?例如:
f(x = 1, y 2, N = 6) = B
A,B,C。。。可以是任何数值:1、2、3。。。或0,1,2。。。或者别的什么。重要的是它们对任何N都是一致的。例如:
N = 1 => A = 1
N = 2 => A = 1
N = 3 => A = 1, B = 2
N = 4 => A = 1, B = 2
N = 5 => A = 1, B = 2, C = 3
N = 6 => A = 1, B = 2, C = 3
N = 7 => A = 1, B = 2, C = 4, D = 4
...
使用if条件问题很容易解决。 给定一对(x,y)和正方形边N:
# N//2 is the number of rings in a N-side square
for k in range(1,N//2+1):
if x == 0+k-1 or y== 0+k-1 or x == N-k or y == N-1:
return k
不过,这似乎是一种非常昂贵的方法来寻找细胞的环值。 我试着用对角线,坐标和,坐标差来求函数。。。但我还是什么也没找到。 有人遇到过这个问题吗? 有办法解决吗
看起来像是要解决的数学问题。 编辑:更新了功能,应该可以更好的处理奇偶点后的中点情况。然而,OP的要求是把它变成一个数学方程,我不知道怎么做
环形探测器(5、5、6)
我认为这个函数满足您的要求:
字母小测验:
编辑:如果您坚持不在函数中使用
if
这个词,您可以(有些尴尬地)将上述函数重写为:或者,如果你想让它看起来更像“公式”(尽管不可读,而且需要更多的重复计算):
虽然这或多或少不是“数学”的,但基本上是相同的逻辑
在“无穷范数”意义上,环值是到数组中心距离的补码
这为A赋值
0
,为B赋值1
,依此类推为了避免半整数,可以使用
max
和abs
函数可能涉及隐藏的ifs,但您无法避免相关问题 更多 >
编程相关推荐