在六边形场上通过螺旋创建单元的算法

Coy*_*yod 5 php algorithm hexagonal-tiles

帮助找到在六边形场上通过螺旋创建单元格的算法.

看图像:

alt text http://img685.imageshack.us/img685/927/fieldr.png

让我们想象一个无量纲的二维数组.X轴是蓝线,Y是水平,螺旋是红色.

我需要通过螺旋将中心点x0y0的单元格添加到N点

请告诉我解决问题的方法.谢谢!

shu*_*ura 6

我建议稍微更改细胞编号,这样当你向下和向右(或向上和向左)时,X保持不变.那么像下面的简单算法应该工作:

  int x=0, y=0;   
  add(x, y); // add the first cell
  int N=1 
  for( int N=1; <some condition>; ++N ) {
    for(int i=0; i<N; ++i) add(++x, y);  // move right
    for(int i=0; i<N-1; ++i) add(x, ++y); // move down right. Note N-1
    for(int i=0; i<N; ++i) add(--x, ++y); // move down left
    for(int i=0; i<N; ++i) add(--x, y); // move left
    for(int i=0; i<N; ++i) add(x, --y); // move up left
    for(int i=0; i<N; ++i) add(++x, --y); // move up right
  }
Run Code Online (Sandbox Code Playgroud)

这会产生如下点:

生成点的图

转型后我们得到:

将生成的点转换为十六进制网格