Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用六边形图像随机生成图案_Android_Algorithm_Random_Hexagonal Tiles - Fatal编程技术网

Android 使用六边形图像随机生成图案

Android 使用六边形图像随机生成图案,android,algorithm,random,hexagonal-tiles,Android,Algorithm,Random,Hexagonal Tiles,好的,我有这些图片: 基本上,我想做的是创建一个由5到12个六边形组成的“马赛克”,其中大多数六边形大致居中,所有线条都在这里交汇 例如: 我知道我可能只是蛮力地使用它,但在为Android开发的过程中,我需要一种更快、更高效、处理器密集度更低的方式 有谁能给我一个解决方案,甚至能给我指出正确的方向吗?这个问题很好,也很棘手。首先,您可以为每个图像定义对象,这些图像具有指定哪条边附着有线的属性。然后,在布局中添加图像时,可以旋转布局,使一个图像中的带线边缘与另一个图像的带线边缘相邻。这可

好的,我有这些图片:

基本上,我想做的是创建一个由5到12个六边形组成的“马赛克”,其中大多数六边形大致居中,所有线条都在这里交汇

例如:

我知道我可能只是蛮力地使用它,但在为Android开发的过程中,我需要一种更快、更高效、处理器密集度更低的方式


有谁能给我一个解决方案,甚至能给我指出正确的方向吗?

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

我有一个随机想法,就是按照Deepak所说的定义一个类,跟踪其六条边中的每一条边的状态(例如,在
int[]neighbor
中,如果顶边有neighbor,neighbor[1],则neighbor[0]状态说明右上边缘是否有邻居,以此类推(顺时针)

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

例如,让我们在您的第一个屏幕截图中使用具有四个邻居的中心六边形。基于上述方案,其数组将是
[1,0,1,1,0,1]
。假设邻居[0]是最低有效位(2^0),邻居[5]是最高有效位(2^5),我们有
[1,0,1,1,0,1]-->45
。在查找表的某个地方,我们已经定义了45,表示您发布的七个基本六边形图标中的第五个六边形图像,水平翻转*

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


*或者顺时针旋转120度,如果您愿意;)

没有一个六边形可以有5个或6个邻域?不,只是使用我在重新思考时实际链接到的图像,它们可以有5个或6个邻域,但它们不能“连接”到它们(通过六边形中的内线)。在这种情况下,我认为连接部分是次要的,而不是这个问题。但是,我想从这个开始,我面临的其他问题包括将所有线路安装在手机屏幕上(因此整个线路的宽度不能超过4个六边形),以及终止算法(即使所有线路完全连接)欢迎:)请记住对答案进行投票,或者如果您觉得答案在任何方面都有用,请接受答案:)将此更改为我接受的答案,因为它提供了更多详细信息。我会试一试,看看我过得怎么样,谢谢:)