2011-08-22 108 views
7

我读过这篇文章:generating/creating hexagon grid in C。但看起来作者和回答者已经放弃了它。如何绘制/管理六角形网格?

√(hexagonSide - hexagonWidth * hexagonWidth):什么是hexagonSide和hexagonWidth?是不是会< 0(所以平方根无法计算)。

而且,我可以把一个六角形成长方形?我需要建立这样一个电网:

Source:Wikipedia

还有一件事,我该怎么安排我的阵列来存储数据,以及获取哪些小区是旁边一个小区?

我从来没有教给六边形,所以我什么都不知道,但我可以很容易地学习新的东西,所以如果你能解释一下或者给我一个线索,我可以做我自己。

+0

这样做将需要只是一个小几何/三角多。六角形顶点处的角度都是360/3度或120度。有了这些信息和使用Java数学库方法(尽管要小心将度数改为弧度),您应该可以在不使用其他代码的情况下轻松绘制这些数据。在将代码提交给IDE之前,首先在纸上使用图表。我觉得最好把六边形看作六个等边三角形,但是尽可能为你做最合适的做法。如果您遇到困难,请返回您的代码,我们将非常乐意提供帮助! –

+0

我不知道是什么在链接的家伙在说什么,但基本的三角会告诉你,六边形,S侧,由S与它的高度*平方的3根或Java的单曲* Math.sqrt(3);' –

+1

参见如何找到邻居这篇文章http://stackoverflow.com/questions/6661169/finding-adjacent-neighbors-on-a-hexagonal-grid – Buhb

回答

4

这是我画的六边形:

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- 

破折号是空的位置 - 他们的存在:表示该数据将认为它这样

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); 
    } 
+0

你扩展了什么?...不是一个TextView? –

+0

这是一个矩形类的'AndEngine'。您可以通过绘制上面提到的几行来获得与Android的Canvas视图相同的结果。 –

+0

那么这画六边形?请参阅[我的问题](http://stackoverflow.com/questions/30241050/how-to-draw-a-hexagon-map-in-libgdx-using-the-polygon-class?noredirect=1)。也许你可以帮我解决我的问题。 –

9

的一种方式在数组中,但不代表任何六边形。这里,六边形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/