2011-09-12 18 views
18

六角形ラティスを表現するための最良の方法です:2次元配列または表現するものは何でも我々は六角形ラティス持っ

+0

あなたは、ノードまたは分野に興味はありますか? –

+2

あなたは何を表現しようとしていますか?無限の格子?長方形の有限格子?頂点に関するデータ?エッジのデータ? –

+4

[斜め六角](http://ferkeltongs.livejournal.com/31455.html)と[Amitのグリッドに関する考え方](http://www-cs-students.stanford.edu/~amitp/game-programming)を参照してください。/grids /) –

答えて

12

最も簡単な方法でそれを表現するための最良の方法は何

_ _ _ 
/\_/ \_/ \_ 
\_/ \_/ \_/ \ 
/\_/ \_/ \_/ 
\_/ \_/ \_/ 

を2次元配列を持つ16進グリッドは、あなたの軸を斜めにすることです:各ヘクスの行は、前のものより半ステップほどオフセットされています。一貫している限り、各行が前後にオフセットされているかどうかは関係ありません。以下、各連続する行は半ヘクス前方にオフセットされている:

(0,0) (0,1) (0,2) (0,3) (0,4) 

    (1,0) (1,1) (1,2) (1,3) (1,4) 

     (2,0) (2,1) (2,2) (2,3) (2,4) 

     (3,0) (3,1) (3,2) (3,3) (3,4) 

任意の所与ヘクスの最近傍を決定することは容易である:場合には、上記所与のアレイアドレス(r,s)ために、次のものが:

また
(r-1, s) 
(r-1, s+1) 
(r, s-1) 
(r, s+1) 
(r+1, s-1) 
(r+1, s) 

は、位置の描画が簡単であることに注意:

x= dx * (s + 0.5*r) 
y= dy * r 

012:ヘクス上記 (r,s)の中心が画面の位置にあります

これに代わる方法として、交互の行を半角で半分オフセットする方法があります。これにより、指定された配列に対してより矩形の形状が得られますが、描画位置と最近傍を決定するには、それぞれ偶数行と奇数行の2つの場合が必要になります。

OPは多くを望んでいるので、私は私のお気に入りのあいまいな六角インデックスシステムへのリンクを追加します


...あり、他の座標系が利用可能であるが、彼らはあまり便利で、よりあいまいです:aは"spiral honeycomb mosaic"。これは、以下のように(BASE-10をない、それはベース-7にラベル付けされていることに注意)、インデックスにベース-7システムを使用して、六角場所の連続し、より大きな「スーパー・六角」グループ:

7 elements:    49 elements: 

    2 3 
          22 23 
1 0 4 --> 
        12 13 21 20 24 
    6 5 
       11 10 14 26 25 32 33 

        16 15 02 03 31 30 34 --> [3 base-7 digits 
                -> 343 elements...] 
       62 63 01 00 04 36 35 

       61 60 64 06 05 42 43 

       66 65 52 53 41 40 44 

         51 50 54 46 45 

         56 55 

リンクをしていますこの座標系を扱うためのいくつかのコードですが、実際には評価しようとしていません。

+0

あなたの解は答えに表示されている格子を実際に表していません - それは90度回転しています。疑問の格子は直接水平な隣人を持っていませんが、垂直なものを持っています。 –

+0

@andrewコック:本当ですか?今日はちょっと気分が悪いと感じていますか? :-)おそらくアスキーで絵を描く方が簡単でした。 1つは確かにrとsの役割を交換して、画像を反転することができます... – phkahler

+0

私はr =行とs =歪んだ列と思っていました。とにかくCスタイルの配列規則は普通は[行] [列]です。もちろん、phkahlerが言うように、あなたは好きなように描画することができます。 – comingstorm

2

2行は2行= 1桁の高さ、1列= 1六角幅を使用すると問題ありません。

4,1,5,2,6,3 
4,7,5,8,6,9 
A,7,B,8,C,9 
A,D,B,E,C,F 
  • 番号のすべてのペアは、1枚の六角タイルです。
  • 12と6時を見つけるY + 1が同じタイル
      であれば、あなたの異なるタイル上
    • は2と4時に
      • チェックを見つけるまでちょうど+ -Yであります
      • の場合2時はX + 1 & 4時はX + 1、Y + 1
      • 2時はX + 1、Y-1 & 4時00分です。クロックはX + 1
+0

ありがとう!それは非常に珍しいです! – Eugeny89

+0

このパターンについて考えるもう一つの方法は、正方格子を取り、パリティに基づいて座標の半分を落とすことです(例えば、 'x + y'が偶数になるように'(x、y) 'を受け入れるだけです)。もちろん、配列のエントリの半分を無駄にしたくないので、上の@ LastCoderの配列を使用します。 – comingstorm

3

思い出にhextileを表現するために4つの異なる方法があります。

enter image description here

関連する問題