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