*免责声明:我发布这个只是为了节省未来的搜索时间,对于任何人*
*谁需要这个(出于某种原因)*
你好!
好吧,我需要一个算法来找到一个点的偏移(相对于原点)
方形螺旋。我在互联网上看了很多但似乎无法找到
一个有效的解决方
我希望代码能够以下列模式生成偏移量:
所以,例如,如果我输入尝试获取索引8的偏移量,我会收到(-1,-1)。
答案 0 :(得分:0)
爪哇:
Vector2D spiral(int i) {
int index = i + 1;
int s = ceil(sqrt(index)) + ((ceil(sqrt(index)) % 2 + 1) % 2);
int ringIndex = 0;
int p = 1;
if (s > 1) {
ringIndex = i - (s - 2) * (s - 2);
p = s * s - (s - 2) * (s - 2);
}
int ri = (ringIndex + (int) (s / 2)) % p;
int x = 0;
if (s > 1)
x = ri < (p / 4) ? ri :
(ri <= (p / 4 * 2 - 1) ? (p / 4) :
(ri <= (p / 4 * 3) ? ((p / 4 * 3) - ri) :
0));
int y = 0;
if (s > 1)
y = ri < (p / 4) ? 0 :
(ri <= (p / 4 * 2 - 1) ? (ri - (p / 4)) :
(ri <= (p / 4 * 3) ? (p / 4) :
(p - ri)));
x -= (int) (s / 2);
y -= (int) (s / 2);
return new Vector2D(x, y);
}
Python:
def spiral(i):
index = i+1
s = math.ceil(math.sqrt(index)) + ((math.ceil(math.sqrt(index)) % 2 + 1) % 2)
s = int(s)
ringIndex = 0
if s > 1:
ringIndex = i - (s-2)*(s-2)
p = 1
if s > 1:
p = s*s - (s-2)*(s-2)
ri = (ringIndex + int(s / 2)) % p
x = 0
if s > 1:
x = ri if ri < (p / 4) else \
((p / 4) if ri <= (p / 4 * 2 - 1) else
(((p / 4 * 3) - ri) if ri <= (p / 4 * 3) else
0))
y = 0
if s > 1:
y = 0 if ri < (p / 4) else \
(ri - (p / 4) if ri <= (p / 4 * 2 - 1) else
((p / 4) if ri <= (p / 4 * 3) else
(p - ri)))
x -= int(s / 2)
y -= int(s / 2)
return x, y