方形螺旋坐标

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;
    
  

【讨论】:

以上是关于方形螺旋坐标的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL——点的绘制(使用OpenGL来绘制可旋转坐标系的螺旋线)

将长坐标和纬度坐标划分为子坐标(较小的正方形)?

在OpenGL中用极坐标绘制正方形

多边形和方形纹理的纹理坐标

三维方形坐标空间内转角对应的单位向量

[leetcode] 54. 螺旋矩阵