好的,我有这些图像:
基本上我要做的是创建一个大约 5 到 12 个六边形的“马赛克”,其中大部分大致集中,并且所有线条都汇合。
例如:
我知道我可能只是暴力破解它,但是当我为 Android 开发时,我需要一种更快、更高效且处理器密集程度更低的方式来做这件事。
任何人都可以为我提供解决方案,甚至只是指出我正确的方向吗?
好的,我有这些图像:
基本上我要做的是创建一个大约 5 到 12 个六边形的“马赛克”,其中大部分大致集中,并且所有线条都汇合。
例如:
我知道我可能只是暴力破解它,但是当我为 Android 开发时,我需要一种更快、更高效且处理器密集程度更低的方式来做这件事。
任何人都可以为我提供解决方案,甚至只是指出我正确的方向吗?
好而棘手的问题。您可以开始为每个图像定义对象,该对象具有指定哪条边缘附有一条线的属性。然后,在布局中添加图像时,您可以旋转它,使一个图像中带有线条的边缘与另一个图像的带有线条的边缘相邻。这可能有点复杂,但我希望你至少可以从这样的事情开始。
我的一个随机想法是按照 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 定义为您发布的七个基本六边形图标中的第 5 个六边形图像,水平翻转*。
是的,涉及蛮力,但它是一种“更智能”的蛮力,因为您不会旋转以查看六边形是否适合。相反,它涉及更有效的查找表。
*如果您愿意,也可以顺时针旋转 120 度;)