【问题标题】:How to draw/manage a hexagon grid?如何绘制/管理六边形网格?
【发布时间】:2011-08-22 03:40:13
【问题描述】:

我读过这篇文章:generating/creating hexagon grid in C。不过貌似作者和答主都已经放弃了。

√(hexagonSide - hexagonWidth * hexagonWidth): hexagonSide 和 hexagonWidth 是什么?是不是会

而且,我可以将六边形放入矩形中吗?我需要像这样创建一个网格:

还有一件事,我如何安排我的数组来存储数据,以及获取一个单元格旁边的单元格?

我从来没有教过六边形,所以我对它一无所知,但是我可以很容易地学习新东西,所以如果你能解释或给我一个线索,我可以自己做。

【问题讨论】:

  • 这样做只需要一点几何学/三角学。六边形顶点的角度都是 360/3 度或 120 度。有了这些信息并使用了 Java 数学库方法(尽管要小心将度数更改为弧度),您应该能够在不使用其他代码的情况下轻松绘制此图。在将代码提交到 IDE 之前,首先使用纸上的图表。我发现最好把六边形想象成六个等边三角形,但做最适合你的事情。如果您遇到困难,请返回您的代码,我们将非常乐意提供帮助!
  • 我不确定链接中的人在说什么,但基本的三角学会告诉你,六边形的边 s 与其高度的关系是 s * 平方根3 或在 Java 中 s * Math.sqrt(3);
  • 查看这篇关于如何找到邻居的帖子stackoverflow.com/questions/6661169/…
  • @WN:我不敢苟同。如果“s”是六边形的边(所以每个六边形有 6 条边,s),那么边长为 s 的等边三角形的高度为 s * sqrt(3) / 2 ... sin 的基本三角的一个 60 度角。由于六边形的高度是三角形高度的两倍,所以从平底到平顶的高度为 2 * s * Math.sqrt(3) / 2,等于 s * Math.sqrt(3)。 Q.E.D.
  • -1 多个问题打包在一起。

标签: java algorithm graphics hexagonal-tiles


【解决方案1】:

表示数据的一种方法是这样考虑:

a-b-c-d-e-
-f-g-h-i-j
k-l-m-n-o-
-p-q-r-s-t
u-v-w-x-y-

破折号是空位置——它们存在于数组中,但不代表任何六边形。这里,六边形 m 连接到六边形 c、g、h、q、r、w。一旦您对该表示感到满意,您可以通过删除空位置使其更紧凑:

abcde
fghij
klmno
pqrst
uvwxy

六边形 m 仍然与六边形 c、g、h、q、r、w 相连,只是有点难看。

更新阅读:http://www-cs-students.stanford.edu/~amitp/game-programming/grids/

【讨论】:

    【解决方案2】:

    这就是我画六边形的方式:

        public Hexagon(float pX, float pY, float pSize) {
            super(pX, pY, pSize, pSize);
    //      setColor(1, 0, 0);
            setAlpha(0);
    
            float x1, x2, y1, y2;
            float lineWidth = 3;
    
            x1 = 0; y1 = pSize / 2;
            x2 = pSize / 4; y2 = (pSize * ((2 - (float)Math.sqrt(3)) / 4)); // Done
            Line line = new Line(x1, y1, x2, y2);
            line.setLineWidth(lineWidth);
            attachChild(line);
    
            x1 = x2; y1 = y2;
            x2 = pSize * .75f; // Done
            line = new Line(x1, y1, x2, y2);
            line.setLineWidth(lineWidth);
            attachChild(line);
    
            x1 = x2; y1 = y2;
            x2 = pSize; y2 = pSize / 2; // Done
            line = new Line(x1, y1, x2, y2);
            line.setLineWidth(lineWidth);
            attachChild(line);
    
            x1 = x2; y1 = y2;
            x2 = pSize * .75f; y2 = pSize - (pSize * ((2 - (float)Math.sqrt(3)) / 4)); // Done
            line = new Line(x1, y1, x2, y2);
            line.setLineWidth(lineWidth);
            attachChild(line);
    
            x1 = x2; y1 = y2;
            x2 = pSize / 4; // Done
            line = new Line(x1, y1, x2, y2);
            line.setLineWidth(lineWidth);
            attachChild(line);
    
            x1 = x2; y1 = y2;
            x2 = 0; y2 = pSize / 2; // Done
            line = new Line(x1, y1, x2, y2);
            line.setLineWidth(lineWidth);
            attachChild(line);
    
            touchableArea = new Rectangle(pSize / 4, pSize / 4, pSize * .75f, pSize * .75f);
            touchableArea.setAlpha(0);
            attachChild(touchableArea);
        }
    

    【讨论】:

    • 你扩展了什么?...不是 TextView?
    • 这是一个矩形类AndEngine。您可以通过绘制上述线条来使用 Android 的 Canvas 视图获得相同的结果。
    • 所以这画了一个六边形?请参阅my question。也许你能帮我解决我的问题。
    【解决方案3】:

    你可以看看https://code.google.com/p/jhexed/我猜它可以是一个例子

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多