ios - 在六边形 map 上显示最大范围

标签 ios logic

我想在我的六角形 map 中显示最大移动叠加层。例如:

中心点在 50,50 允许的最大移动量为 5 个六角形。

这是我用于覆盖的代码:

for (int height = lowHeight; height <= highHeight; height++)
{
    for (int width = lowWidth; width <= highWidth; width++)
    {
        [self hexOnMap:height :width :@"green"];
    }
}

宽度为 xCoordinate 50 高度为y坐标50

低高度 = 高度 - 5

highHeight = 高度 + 5

低宽度 = 宽度 - 5

高宽度 = 宽度 + 5

显然我的循环不工作,因为角在移动超过 5 个六角形。因为我觉得我的智商每分钟都在下降,请有人告诉我明显的:) 5 的移动值不是静态的。

enter image description here

编辑:@DPenner

感谢您的回复。我试过类似的东西,但这个被诅咒的东西仍然无法工作。您的代码显示此结果:

enter image description here

编辑 2:@DPenner - 你几乎成功了。我正在用您的代码上传叠加层,以便您查看。昨晚我终于找到了一篇很棒的文章,它给了我解决这个问题所需的线索。但我真的很感谢你的帮助并努力解决这个问题!!!

enter image description here

最佳答案

我删除了我的旧答案,因为它是完全错误的:我忘记考虑相邻的六角形有时在 x 和 y 坐标上可能不同。捕捉它很棘手,但以下代码应该可以工作:

如果中心X坐标是偶数:

for (int width = lowWidth; width <= highWidth; width++)
{        
    double heightNeeded = 5 - abs((centerX - width)/2.0);
    for (int height = centerY - (int)ceil(heightNeeded); height <= centerY + (int)floor(heightNeeded); height++)
    {
        [self hexOnMap:height :width :@"green"];
    }
}

如果中心 X 坐标是奇数,交换 floor 和 ceiling 函数。将 5 更改为不同大小的叠加层。

我亲手检查了一下,似乎工作正常。外层循环是宽度/X 循环,因为它的 X 坐标在水平方向呈锯齿状,天花板和地板在内部高度/Y 循环中起到“固定”的作用。

关于ios - 在六边形 map 上显示最大范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16779253/

相关文章:

python - 这个程序如何运作?

ios - 有什么方法可以在 iOS 中将音乐添加到 iPod 库?

ios - AVSynchronizedLayer 动画适用于本地文件但在流式传输时效果不佳

ios - 属性检查器不显示导航项属性

python - Python中的和/或?

c - 防止输入为某些字符

python - 查找列表中的第二大元素(对于重复元素)

logic - 解决命题逻辑/ bool 表达式的工具(SAT Solver?)

ios - 如何从我的应用程序打开 ios native 拨号器应用程序

ios - Firebase 电话身份验证错误 FIRAuthErrorCodeMissingAppToken