在图像地图(500 x 500)上,我只有0和1。大多数情况下都是一些,但我有几个零簇(这代表障碍,所以玩家不能越过像山丘一样)。障碍可以有任意形状,所以需要简化,我决定找到一种方法用一个不超过8个顶点的多边形包围每个这样的障碍物(周围的多边形可以在里面有一些1,但障碍物的所有0都必须在里面那个多边形)。对于我需要生成一个多边形的每个障碍。我可以在障碍物的外边界上连接每个0,但是它将产生具有n(n>> 8)个顶点的多边形。我正在寻求任何建议如何做到这一点或一些类似算法的名称。
答案 0 :(得分:3)
您应该首先构建群集的凸包。 在此之后,您可以使用以下策略将顶点数量减少到8:
您可以找到任何一对连接点的交叉点。 在提供的图像上,点8和9由一个10替换,但增加了多边形大小。
注意:此方法无法保证此多边形不会与另一个“零”群集重叠。 有时候,有8个顶点的多边形可能无法覆盖没有其他聚类交叉的聚类。
答案 1 :(得分:1)
您可以将S,SW,W,NW,N,NE,E和SE的最远点作为障碍物,并通过在垂直方向上穿过这些点的段创建八边形集。即适当地:W-E,NW-SE等。我认为,这将是最快最简单的算法,与@Толя的解决方案相反,它永远不会给你额外的长星光线顶点。