2011-07-11 8 views
2

Imがこの問題に直面しています。私はhexgridを作成し、この方法で作成することができるようにしたい:2D配列にhexgridの頂点位置を格納する方法は?

//grid extents 
int numCols,numRows; 
for (int i=0; i<numCols; ++i){ 
for (int j=0; j<numRows; ++j){ 

//x and y coordinates of my hexagon's vertices 
float xpos,ypos; 


//2D array storing verteces of my hextopology 
vertices[i][j] = new VertexClass(xpos, ypos); 

// statements to change xpos/ypos and create hex 
} 
} 

私は、hexgridを作る最初のヘクスオブジェクトを作成し、グリッド上で、それを複製することが分かった全ての方法は、このように縁を結ぶ重複verteces位置広告を作成します。私は頂点の位置を複製しないようにしたい。このようなグリッドを作るためにステートメントを宣言するにはどうすればよいですか?

おかげ

答えて

2

Lが六角形の辺の長さ、および列iインデックス頂点をさせそしてこのように `J行う:(

i 0 0 1 1 2 2 3... 
j  \ /  \ /
0 . A---o .  . o---o 
    / \  / \ 
    /  \  /
    /  \ /
1 -o .  . o---o . 
    \  / \ 
    \  /  \ 
     \ /  \ /
2 . o---o .  . o---o 
    / \  / \ 

(x,y)頂点Aの座標とするトップ左)。

L*sqrt(3)/2の場合、各行のy座標が移動します。頂点からx方向に距離L/4にある六角形の点を見ると、X座標は非常に簡単に計算できます。これらの点(点でマークされている)は、X方向に距離L*3/2で格子を作る。より

vertices[i][j] = Vertex(x - L/4 + i*L*3/2 + L/4*(-1)^(i+j), y - j*L*sqrt(3)/2) 

1個の六角形の頂点のインデックスは、タイプのものである:(i,j), (i+1,j), (i+1,j+1), (i+1,j+2), (i,j+2), (i,j+1)

関連する問題