网格地图中的碰撞检测?
Collision detection in grid map?
有网格图(瓦片图)。在所有的瓷砖中,有些是免费的(空的),有些是障碍物。
现在,如果我随机选择空瓷砖(瓷砖 A 和瓷砖 B)并在它们之间画一条线段。
判断这条线段是否与任何障碍物无碰撞的最快算法是什么? (下图中:红色方块是障碍物,Line_2是免碰撞,Line_1不是)
目前,我正在做的是从A到B进行体素遍历,并检查遍历的瓦片是否包含有没有障碍?
但是有更好的解决方案吗?
我相信,算法的速度取决于场地的大小和障碍物的数量。如果这个领域充满了障碍,你的方法就很好。
另一种方法是找到射线与图块每一侧的交点。
我认为如果您有几块瓷砖并且有很多免费空间,这种方式非常好space。
UPD: 这种方法应该通过对所有集合的 "back sides" 个图块进行排除计算来优化。它将减少计算量并加快例程。
最后,我相信您可以在代码中同时使用这两种算法。您可以 select 通过近似地图 "density" 的方法。
有网格图(瓦片图)。在所有的瓷砖中,有些是免费的(空的),有些是障碍物。 现在,如果我随机选择空瓷砖(瓷砖 A 和瓷砖 B)并在它们之间画一条线段。 判断这条线段是否与任何障碍物无碰撞的最快算法是什么? (下图中:红色方块是障碍物,Line_2是免碰撞,Line_1不是)
目前,我正在做的是从A到B进行体素遍历,并检查遍历的瓦片是否包含有没有障碍?
但是有更好的解决方案吗?
我相信,算法的速度取决于场地的大小和障碍物的数量。如果这个领域充满了障碍,你的方法就很好。
另一种方法是找到射线与图块每一侧的交点。
我认为如果您有几块瓷砖并且有很多免费空间,这种方式非常好space。
UPD: 这种方法应该通过对所有集合的 "back sides" 个图块进行排除计算来优化。它将减少计算量并加快例程。
最后,我相信您可以在代码中同时使用这两种算法。您可以 select 通过近似地图 "density" 的方法。