Как сохранить положения вершин гекс-сетки в 2D-массиве? - PullRequest
3 голосов
/ 11 июля 2011

Я сталкиваюсь с этой проблемой. Я хочу создать 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, сначала создают объект hex, а затем копируют его по сетке, создавая таким образом положение дубликатов verteces и соединение ребер. Я хочу избежать дублирования позиции вершин. Как я могу объявить заявления, чтобы сделать такую ​​сетку?

Спасибо

1 Ответ

3 голосов
/ 30 сентября 2011

Пусть 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 от вершин.Эти точки (отмеченные точками) образуют решетку с расстоянием 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 )

Индексы вершин в одном шестиугольнике имеют тип: (i,j), (i+1,j), (i+1,j+1), (i+1,j+2), (i,j+2), (i,j+1).

...