我使用嵌套的for循环创建六边形网格。这将创建一个正方形网格:
for (int z = 0; z < gridSize; z++)
{
for (int x = 0; x < gridSize; x++)
{
// creates verts for a hexagon shape which later form a mesh
// x and z form the basis of the Vector3 position of the center
// of each hexagon
CreateCell(x, z);
}
}
我在图像上绘制了z和x的开始和结束值。
我想让网格本身也呈六边形:
我认为找出x的限制:
int greaterThan = Mathf.RoundToInt(gridSize/ 3) - 1;
int lessThan = width - greaterThan;
而且(我认为)当z = gridSize / 2向上取整时,x应该仅是其最小值和最大值(在示例中为0&6),尽管我可能错了!
我试着在IF中加入一堆if,但是它很快开始变得过于复杂,我认为一定有一种更“数学”的方法来做,但是可惜我不是数学!
知道如何编写循环以形成所需的模式吗?
最佳答案
根据您的例外图片,中心是长行(gridSize = 7)。floor(7/2) = 3
(/ 2,因为长行位于中间)
现在,第一行中的gridSize - 3 = 4
==> 4个项目
然后每个迭代添加一个,直到一行中有7个项目。
然后减负...
这是代码(绘制“ *”,不在前后添加空格..)
int gridSize = 7;
int center = 7/2;
int delta = 1;
for (int r = 0; r < gridSize; r++) {
for (int c = gridSize - center; c < gridSize + delta; c++){
System.out.print("*");
// location of c = c - delta (position)
}
System.out.println();
if (r < center)
delta++;
else
delta--;
}