使用六边形图像随机生成模式

时间:2013-07-11 08:37:49

标签: android algorithm random hexagonal-tiles

好的,我有这些图片:

enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here

基本上我要做的就是创建一个大约5到12个六边形的“马赛克”,其中大部分都是大致集中的,并且所有的线都会聚集在一起。

例如:

enter image description here enter image description here enter image description here

我知道我可能只是暴力破解它,但是当我正在为Android开发时,我需要一种更快,更高效且处理器密集程度更低的方法。

任何人都可以为我提供解决方案,甚至只是指出我正确的方向吗?

2 个答案:

答案 0 :(得分:1)

好又棘手的问题。您可以开始的是为每个图像定义对象,该对象具有指定哪个边缘附加了一条线的属性。然后在布局中添加图像时,您可以旋转它,使得一个图像中的线条边缘与另一个图像的边缘相邻。这可能有点复杂,但我希望你至少可以从这样的事情开始。

答案 1 :(得分:1)

我有一个随意的想法是与Deepak所说的关于定义一个跟踪其六个边缘的状态的类(例如,在int[] neighbor中,其中邻居[0]表示是否有上边缘有邻居,邻居[1]说明如果右上边缘有邻居,依此类推顺时针方向)

然后对于屏幕上的每个六边形,通过二进制将其数组转换为整数。基于该整数,使用查找表来确定要使用的六边形图像+应如何定向/翻转,然后将该六边形对象指定给该图像。

例如,让我们在你的第一个截图中带有四个邻居的中央六边形。根据上面提到的方案,它的数组将是[1, 0, 1, 1, 0, 1]。将邻居[0]作为最低有效位(2 ^ 0),将邻居[5]作为最高有效位(2 ^ 5),我们有[1, 0, 1, 1, 0, 1] --> 45。在查找表的某处,我们已经定义了45表示第五个六边形图像,水平翻转 *,在您发布的七个基本六边形图标中。

是的,涉及蛮力,但它是一个“更聪明”的蛮力,因为你没有旋转,看看六边形是否合适。相反,它涉及更有效的查找表。

如果您愿意,

*或顺时针旋转120度;)