2011-08-22 23 views
7

私はこの記事を読んだ:generating/creating hexagon grid in C。しかし、著者と回答者の両方がすでにそれを放棄したように見えます。六角形グリッドを描画/管理する方法は?

√(hexagonSide - hexagonWidth * hexagonWidth):hexagonSideとhexagonWidth何ですか? < 0ではありません(平方根は計算できません)。

そして、私は長方形に、六角形を置くことができますか?どのように私は、データを格納するための私の配列を配置し、ならびに1つのセルの隣である細胞を得ることができ、

Source:Wikipedia

もう一つ:私はこのようなグリッドを作成する必要がありますか?

私は、六角形について教えされていなかったので、私はそれについて何も知らないが、私は簡単に新しい事を学ぶことができますので、あなたが説明したり、私に手掛かりを与えることができれば、私はそれを自分で行うことができます。

+0

少し幾何学/三角法以上のものを必要としないだろうこれを行うことができると思います。六角形の頂点の角度はすべて360/3度または120度です。この情報とJava Mathライブラリメソッドの使用(度をラジアンに変更することに注意してください)を使用すると、他のコードを使用せずに簡単にこれを描画できます。 IDEにコードをコミットする前に、まず紙の上でダイアグラムを操作してください。私は六角形を6つの正三角形と考えるのが最良だと思っていますが、あなたに一番良いものは何でもしてください。あなたが立ち往生している場合は、あなたのコードで戻ってきてください、そして私たちは喜んで助けてくれるでしょう! * –

+0

私はリンク内の男が話していたかわからないんだけど、基本的な三角法がs '*平方3のルートまたはJavaで六角、Sの側は、sがその高さに関連していることを教えてくれますMath.sqrt(3); ' –

+1

が隣人を見つける方法についてのこの記事を参照してくださいhttp://stackoverflow.com/questions/6661169/finding-adjacent-neighbors-on-a-hexagonal-gridウナギの – Buhb

答えて

4

これは私が、六角形を描く方法です:データを表現するために

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

一つの方法は、このように考えて次のようになります。

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に接続されている。あなたはその表現でOKになったら、あなたはヌル位置を除去することによって、それがよりコンパクトにすることができます。

abcde 
fghij 
klmno 
pqrst 
uvwxy 

六角mはまだそれがほんの少しだ、wは六角形のC、G、H、Q、R、に接続されています見るのが難しい。

更新これを読む:http://www-cs-students.stanford.edu/~amitp/game-programming/grids/

関連する問題