Java 创建六边形网格图案
Java 创建六边形网格图案,java,Java,我有这个漂亮的六边形模式,我需要用java实现它。我已经有了一个表示一个六边形的类“Tile”和一个表示每个Tile坐标的类“Vector”。每个平铺对象都有自己的向量 现在我只想把所有的瓷砖添加到一个列表中。但要做到这一点,我需要创建全部37个。这就是我现在被困的地方。当然,我可以全部手工创建,但这不仅会很乏味,容易出错,而且也不是很优雅 你们谁能告诉我我能做什么 我想你需要做的第一件事就是把你的瓷砖连接起来。给他们六个参考,每个潜在的邻居一个——西北、东北、东、东南、西南和西部。然后,给定任
我有这个漂亮的六边形模式,我需要用java实现它。我已经有了一个表示一个六边形的类“Tile”和一个表示每个Tile坐标的类“Vector”。每个平铺对象都有自己的向量 现在我只想把所有的瓷砖添加到一个列表中。但要做到这一点,我需要创建全部37个。这就是我现在被困的地方。当然,我可以全部手工创建,但这不仅会很乏味,容易出错,而且也不是很优雅
你们谁能告诉我我能做什么 我想你需要做的第一件事就是把你的瓷砖连接起来。给他们六个参考,每个潜在的邻居一个——西北、东北、东、东南、西南和西部。然后,给定任何瓷砖,您可以轻松地遍历其所有邻居。创建了
平铺
对象的此图形后,将它们指定为向量
实例
假设每个平铺的向量
是唯一的,下一步是创建一个函数,将这些向量
实例映射到笛卡尔坐标。在这一点上,您可以绘制点,以查看是否在屏幕上的正确空间中放置瓷砖
从你发布的链接来看,听起来你好像在尝试制作某种游戏(很酷!)。如果是这种情况,那么在使vector2Cart()函数正常工作后,您还有两件事要做:
正确渲染六边形瓷砖,而不仅仅是点或正方形
创建逆向cartToVector()
方法,该方法采用笛卡尔坐标,并返回与占据屏幕该部分的Tile
对应的向量。通过这种方式,您可以单击屏幕并对磁贴执行操作
要构建网格,请利用几何体/对称性。从深度角度考虑网格,其中中心深度为0,每个连续层的深度都在增加。上面的网格深度为3。
每个标高都有与其深度相关的恒定属性(每个标高有6条边,每条边的长度与深度成比例)
以下代码将有助于构建网格:
public class HexagonGrid {
public static void main(String[] args) {
int size = 3;
buildHexagonGrid(size);
}
private static void buildHexagonGrid(int size) {
int totalTiles = 0;
int depth = 0;
// TODO: Build the center tile here
totalTiles++; // Center
System.out.printf("Current size (after depth=%d) = %d\n", depth, totalTiles);
for (depth=1; depth<=size; depth++) {
for (int side=1; side<=6; side++) {
for (int tile=1; tile<=depth; tile++)
// TODO: Build the Tiles along current side/depth
// There is a clear relationship between x/y/z and depth/side/tile
totalTiles++;
}
System.out.printf("Current size (after depth=%d) = %d\n", depth, totalTiles);
}
}
}
最简单的方法似乎是使用两个嵌套循环,一个在行上,另一个在一行内的平铺上。我不确定我是否从列表开始。您需要与原点保持一定距离(曼哈顿距离)内的所有瓷砖。我想你需要考虑到这个形状的实际几何结构。我收回这一点。这不是曼哈顿的距离。在每个轴上从原点最多移动三步+-3。两个嵌套循环的问题似乎是,我需要两个嵌套循环的7倍。每行一个。目前看来,这是最好的选择。但也许“完美”的解决方案就在那里:)你需要进一步的帮助吗?如果您愿意,我可以添加到我的答案中,以显式创建所有平铺(分配x/y/z)?
Current size (after depth=0) = 1
Current size (after depth=1) = 7
Current size (after depth=2) = 19
Current size (after depth=3) = 37