我正在尝试为我玩的游戏开发一个在线地图编辑程序 地图的数据有点大。如果我发送每个方块的数据,则中等大小的地图数据接近1 mb。
我认为我能做的就是找到地图上的边界并根据它创建多边形。
目前我:
这适用于北方地区。然而,当我到达南部地区时,它向北检查并发现它是一个未经访问过的地点并且去了那个地方。它混乱的坐标是13,11。
显然,这并没有给我我想要的界限,也没有走完整个地图。所以,有些东西需要改变。
我考虑过以与之前相同的操作顺序添加边界检查(NESW)。但是,也有可能搞砸了。
在(13,11),它会向北检查并发现它是一个未被访问的位置。而这一次,那里有一个边界,所以它认为去那里是可以的。
如何走完整个外边界?
我确实看过这里提到的凸壳算法,但我认为这不是我需要的。我可能是不正确的,但这是我期望凸包的结果看起来像 虽然这确实减少了地图的大小,但仍然有很多我不需要的数据。当我需要获取地图中项目的内部边界时,尺寸减小会丢失,因为它们也会不规则。
那么,我如何确保我实际上走在外边界?
答案 0 :(得分:1)
以下是我在评论中建议的答案的扩展。
想象一下,如果你在一个黑暗的迷宫中。你做了什么来确保你 穿越整个迷宫?简单,只感觉左边的墙; 左转是否可能;被迫时向右转。
好的,更确切地说:
编辑:更正优先级。在前进之前离开,而不是相反。
答案 1 :(得分:0)
不确定我是否遇到问题,但看起来外边框可以表示为正交法线向量数组。或者更确切地说。想象一下一个网格,其中地图方块属于单元格。让我们开始从左上角开始标记我们的部分从0开始。在该表示法中,外部边界的开始为pic。 1将是((3,2),(4,2)),((4,2),(5,2))等等。
每个属于两个单元格的部分,每个部分都是地图方块“1”而其他部分不是边框。您可以遍历网格并简单地收集它们。
然后你必须将它们分成几个周期。这很简单。如果两个部分具有一个共同坐标 - 它们属于单个循环。如果两个循环在它们的部分下面有一个共同的坐标 - 它们是一个循环,你只需将这些数据合并到另一个循环。
如果你有一组明确不同的周期,那么最长的周期就是你的外边界。
当然,如果地图是一个整体。