我正面临这个问题。我想创建一个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的所有方法,首先创建一个十六进制对象,然后在网格上复制它,从而创建重复的椎骨位置和连接边缘。我想避免重复椎骨的位置。如何声明语句来制作这样的网格?
由于
答案 0 :(得分:3)
让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
的坐标(左上角)。
移动每行的y坐标L*sqrt(3)/2
。如果我们在距离顶点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 )
一个六边形中顶点的索引类型为:(i,j), (i+1,j), (i+1,j+1), (i+1,j+2), (i,j+2), (i,j+1)
。