【问题标题】:Generate HoneyComb hexagonal patern in Axial coordinates在轴坐标中生成 HoneyComb 六边形图案
【发布时间】:2014-09-05 11:00:46
【问题描述】:

我正在寻找一种算法来使用轴向坐标生成一个像这样的六边形蜂窝:

但我只设法在 Cube 坐标中找到生成器。

我提出这个问题只是为了分享我的解决方案。

【问题讨论】:

    标签: hexagonal-tiles


    【解决方案1】:

    这会生成所有r*(r-1)*3+1 六角螺旋图案的瓷砖。 该方法的一个缺点是它假设您将形状放置在 (0,0) 处。

       public void makeHoneyComb(int radius){
    
        makeCell(ta, 0, 0);
        for (int r = 0; r > -radius; r--)
            for (int q = -r - 1; q > -radius - r; q--)
                makeCell( q, r);
    
        for (int r = 1; r < radius; r++)
            for (int q = 0; q > -radius; q--)
                makeCell( q, r);
    
        for (int q = 1; q < radius; q++)
            for (int r = -q; r < radius - q; r++)
                makeCell( q, r);
        }
    

    这是基于这样一个事实,像这样的形状可以分成 3 个相似的矩形和中心部分。

    【讨论】:

      【解决方案2】:

      我想在 JavaScript 中使用类似的东西,所以我在这里修改了代码,现在这里是 JS 版本:

      function makeHoneyComb(rings) {
      
        var cells = [];
      
        cells.push({
          c: 0,
          r: 0,
        });
      
        for (r = 0; r > -rings; r--) {
          for (c = -r - 1; c > -rings - r; c--) {
            cells.push({ c: c, r: r });
          }
        }
      
        for (r = 1; r < rings; r++) {
          for (c = 0; c > -rings; c--) {
            cells.push({ c: c, r: r });
          }
        }
      
        for (c = 1; c < rings; c++) {
          for (r = -c; r < rings - c; r++) {
            cells.push({ c: c, r: r });
          }
        }
      
        return cells;
      }
      
      var honeyCombArray = makeHoneyComb(3);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-21
        • 2023-01-10
        • 1970-01-01
        • 1970-01-01
        • 2014-01-11
        • 2022-11-18
        • 1970-01-01
        • 2017-09-30
        相关资源
        最近更新 更多