Algorithm 算法帮助:漫游地图的边界

Algorithm 算法帮助:漫游地图的边界,algorithm,Algorithm,我正在尝试为我玩的游戏开发一个在线地图编辑程序。 地图的数据有点大。如果我发送每个正方形的数据,中等大小地图的数据接近1MB 我想我能做的就是在地图上找到边界,然后根据它创建多边形 目前我: 找到最西北的边界并从那里开始。对于我的示例地图,它是(3,2) 然后,检查北、东、南、西,然后转到第一个没有1作为数据的未访问位置 如果没有未访问的位置,请转到历史上最远的位置 这对北方地区很有效。然而,当我到达一个南部地区,它检查北部,发现这是一个无人访问的位置,并前往该地区。它的坐标是13,11 很

我正在尝试为我玩的游戏开发一个在线地图编辑程序。
地图的数据有点大。如果我发送每个正方形的数据,中等大小地图的数据接近1MB

我想我能做的就是在地图上找到边界,然后根据它创建多边形

目前我:

  • 找到最西北的边界并从那里开始。对于我的示例地图,它是(3,2)
  • 然后,检查北、东、南、西,然后转到第一个没有1作为数据的未访问位置
  • 如果没有未访问的位置,请转到历史上最远的位置

    这对北方地区很有效。然而,当我到达一个南部地区,它检查北部,发现这是一个无人访问的位置,并前往该地区。它的坐标是13,11

    很明显,这并没有给我想要的边界,也没有贯穿整个地图。所以,有些事情需要改变

    我考虑按照与以前相同的操作顺序(NESW)添加边界检查。然而,也有可能把事情搞砸

    在(13,11)点,它会向北面检查,看是否有人去过。这一次,那里有一个边界,所以它会认为去那里是可以的

    我该怎么走完整个外边界

    我确实看过这里提到的凸包算法,但我认为它不是我需要的。我可能不正确,但这就是我所期望的凸包的结果。
    虽然这确实减少了一点地图的大小,但仍然有很多数据我不需要。当我需要获取地图中项目的内部边界时,尺寸缩减会丢失,因为它们也是不规则的


    那么,我如何确保我实际上是在外边界上行走呢?

    我不确定是否有问题,但看起来外边界可以表示为正交法向量的数组。或者更确切地说是部分。想象一个网格,其中地图方块属于单元格。让我们从左上角开始标记部分,从0开始。在该符号中,pic的外部边界的开始。1将是((3,2),(4,2)),((4,2),(5,2))等等

    每个部分属于两个单元格,其中一个是地图正方形“1”,另一个不是边框。您可以遍历网格并简单地收集它们

    然后你必须把它们分类成循环。那很容易。如果两个截面有一个公共坐标,则它们确实属于单个循环。如果两个循环在其截面下有一个公共坐标-它们是一个循环,则只需将一个数据关联到另一个

    当你有一组完全不同的周期时,最长的周期,有最多部分的周期,将是你的外边界


    当然,如果地图是完整的。

    下面是我在评论中建议的答案的扩展

    想象一下,如果你在一个黑暗的迷宫里。你怎么做才能确保你 穿越整个迷宫?简单,只需感觉左边的墙; 如果可能的话向左拐;被迫右转

    好的,更准确地说:

  • 在地图的边界上找到一个起点,我想你已经知道了
  • 确保代表代理当前的面。(上、下、左、右)
  • 按如下顺序排列相对运动方向:(左、前、右、后)
  • 如果可能的话,朝着优先的方向前进
  • 行走时,记下所访问的位置作为答案的一部分。并检查您是否已返回访问过的地方以终止该计划

  • 编辑:更正优先级。左前向前,而不是相反。

    嗯,我认为凸面外壳确实是你需要的。你为什么不这么认为?也许我误解了凸面外壳的工作原理。第三幅图中的黑线不是凸包返回的边界吗?如果我画这些线并填充它,它就不会是地图的精确表示。看起来像RLE(游程长度编码)会压缩这一点。“对不起,我把第三个图像误认为是你想要的结果。你有没有考虑过这个算法……我不知道它的名字,但很直观。想象一下,如果你在一个黑暗的迷宫里。你怎么做才能确保你能穿过整个拉比律?简单,只需感觉左边的墙;如果可能的话向左拐;被迫右转。