3

私はこの問題に直面しています。ヘクスグリッドを作成し、次の方法で作成できるようにしたいと思います。

//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を作成するために私が見つけたすべての方法では、最初にhexオブジェクトを作成し、次にそれをグリッド上に複製して、エッジを結合する重複した頂点位置を作成します。頂点の位置が重複しないようにしたい。そのようなグリッドを作成するためのステートメントをどのように宣言できますか?

ありがとう

4

1 に答える 1

4

L六角形の辺の長さとし、i次のように列と行の頂点にインデックスを付けます。

 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(左上)とします。

各行のy座標よりも。のために移動されL*sqrt(3)/2ます。L/4頂点からx方向の距離にある六角形の点を見ると、X座標の計算は非常に簡単です。これらのポイント(ドットでマークされている)はL*3/2、X方向の距離でラティスを作成します。

よりも:

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)

于 2011-09-29T20:31:23.983 に答える