方形螺旋坐标
Posted
技术标签:
【中文标题】方形螺旋坐标【英文标题】:Square Spiral Co-ordinate 【发布时间】:2014-10-03 09:46:14 【问题描述】:我想找出 x,y 整数是否满足螺旋正方形的点 (x,y)。 (0,0) (0,1) (1,1) (1,2) (0,2) (-1,2) (-2,2) (-2,1) (-2,0) ans等等……
我该怎么做? 我想要 java 或 c++ 函数的逻辑。
【问题讨论】:
可能重复:***.com/questions/25145584/…. 你试过什么?一般来说,SO 不是一个只提供问题描述和索要代码的好地方。这几乎总是会让你投下大量反对票......但是开始使用蛮力解决方案的一种方法是,编写产生螺旋的点(或线段)的程序,然后看看它会把你带到哪里...... . 【参考方案1】:这是一些伪代码逻辑:
Start with x=0, y=0, dist=0, direction=1
Loop
x += (++dist * direction)
WritePoint(x,y)
y += (++dist * direction)
WritePoint(x,y)
direction *= -1
LoopEnd
从那里拿走。
【讨论】:
【参考方案2】:执行此操作:
(operator)(operation)(amount)
其中运算符交替为 x,y,x,y,...(使用 % 运算符),操作交替为 +,+,-,-,+,+,-,-,+,+.. .(再次使用 % 运算符)和数量变化为 1,2,3,...
【讨论】:
【参考方案3】:这是我的答案。为了解决这个问题,我找到了你需要通过绘制来改变方向的索引(最多 ~i=36),然后像在模式识别智商测试中一样找到了公式。
const size = 100;
let x = 500; // 500 is center x
let y = 500; // 500 is center y
let d = 'right';
let n = 1;
for (let i = 0; i < 10; i++)
// change the direction
if (i === Math.pow(n, 2) - n)
d = 'right';
else if (i === Math.pow(n, 2))
d = 'down';
else if (i === Math.pow(n, 2) + n)
d = 'left';
else if (i === Math.pow(n, 2) + (n * 2 + 1))
d = 'up';
n += 2;
// get the current x and y.
if (d === 'right')
x += size;
else if (d === 'left')
x -= size;
else if (d === 'down')
y += size;
else
y -= size;
【讨论】:
以上是关于方形螺旋坐标的主要内容,如果未能解决你的问题,请参考以下文章