如何创建连续多边形的离散网格表示?

How to create a discrete grid representation of a continuous polygon?

我有许多连续的 2D 形状,我想以某种分辨率将它们映射到离散的 NxM 网格上,然后 运行 离散 space 中的路径规划算法。有哪些方法或算法可以做到这一点?

主要看实现细节和主要场景

  1. 如果地图变化不是很频繁,而您想多次使用它,那么预处理地图以填充网格上的障碍物以检查我们是否可以继续前进是有意义的通过单元格是一项快速而简单的任务。

  2. 反击的做法是将障碍物分开放置。在这里,您可以节省预处理时间,但检查障碍物需要大量计算(您需要检查所有 2D 形状以了解您是否越线),您的主要目标是优化它。一个明显的优化是边界框(参见轴对齐的最小边界框 https://en.wikipedia.org/wiki/Minimum_bounding_box) or bounding circles (see Bounding sphere https://en.wikipedia.org/wiki/Bounding_sphere)。这个想法是,如果只有你在附近,就检查 2DShape,如果你离障碍物很远,就很容易检查。在轴对齐边界框中,您需要检查 x_min <= x <= x_maxy_min <= y <= y_max 如果是圆,你需要检查一个 (x-x0)^2+(y-y0)^2<=r^2哪个更好

您可以尝试通过以下方式使用缓存来结合这两种方法:

  1. 以防你从未检查过单元格是否有障碍或不使用 第二种方法有自己的优化。将结果保存在单元缓存中。
  2. 如果您已经检查了单元格使用缓存值
  3. 如果地图上有新的障碍物,使新 2Dshare 边界中所有单元格的缓存值无效 box/circle。

您还需要使用 A* 实现寻路算法,例如,如果它是问题的一部分 (https://en.wikipedia.org/wiki/A*_search_algorithm) and method to check if the point is inside the 2D Share (one of the options is http://alienryderflex.com/polygon/)