【问题标题】:Randomly Generating Patterns Using Hexagonal Images使用六边形图像随机生成图案
【发布时间】:2013-07-11 08:37:49
【问题描述】:

好的,我有这些图片:

基本上,我要做的是创建一个大约 5 到 12 个六边形的“马赛克”,其中大部分大致集中在所有线条汇合的地方。

例如:

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

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

【问题讨论】:

  • 没有十六进制可以有 5 或 6 个邻居?
  • 不,只是使用我链接到的图像
  • 实际上再想一想,他们可以有 5 或 6 个邻居,但他们就是不能“连接”到他们(通过六边形中的内部线)
  • 在这种情况下,我认为连接部分是次要的事情

标签: android algorithm random hexagonal-tiles


【解决方案1】:

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

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

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

是的,涉及蛮力,但它是一种“更智能”的蛮力,因为您不会旋转以查看六边形是否适合。相反,它涉及更有效的查找表。

*如果您愿意,也可以顺时针旋转 120 度;)

【讨论】:

  • 将此更改为我接受的答案,因为它提供了更多详细信息。我会尝试一下,看看我的进展如何,谢谢:)
【解决方案2】:

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

【讨论】:

  • 谢谢,我正在考虑从这个开始但是,我面临的其他问题是将它全部安装在手机屏幕上(所以整个东西不能超过大约 4 个六边形),并让算法终止(即使所有行完全连接)
  • 欢迎 :) 如果您发现它仍然有用,请记得点赞答案或接受答案 :)
猜你喜欢
  • 2012-04-21
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 2015-09-23
相关资源
最近更新 更多