同一个位置离障碍有多远,可以按直线长度衡量,也可以按横竖行走步数衡量。两种距离定义不同,最近的障碍也可能不是同一个,不能把一张距离表直接套到所有用途上。
规则与边界
本例地图为六乘六,障碍只由格子中心点表示。对每个中心计算到所有障碍中心的欧氏距离平方,取最小值,并列出所有并列最近障碍;另算横纵坐标差绝对值之和的最小值作为格子距离。
本例记录
障碍编号零至四,坐标依次为[(0, 4), (2, 0), (2, 2), (2, 5), (3, 4)];地图坐标零至五。
欧氏距离平方矩阵: 4 1 0 1 4 9 5 2 1 2 5 10 4 1 0 1 4 8 1 2 1 1 2 5 0 1 1 0 1 4 1 1 0 1 2 5 格子距离矩阵: 2 1 0 1 2 3 3 2 1 2 3 4 2 1 0 1 2 3 1 2 1 1 2 3 0 1 1 0 1 2 1 1 0 1 2 3 坐标 | 并列最近障碍编号 [0, 0] | [1] [1, 0] | [1] [2, 0] | [1] [3, 0] | [1] [4, 0] | [1] [5, 0] | [1] [0, 1] | [1, 2] [1, 1] | [1, 2] [2, 1] | [1, 2] [3, 1] | [1, 2] [4, 1] | [1, 2] [5, 1] | [1, 2] [0, 2] | [0, 2] [1, 2] | [2] [2, 2] | [2] [3, 2] | [2] [4, 2] | [2] [5, 2] | [4] [0, 3] | [0] [1, 3] | [0, 2] [2, 3] | [2] [3, 3] | [4] [4, 3] | [4] [5, 3] | [4] [0, 4] | [0] [1, 4] | [0] [2, 4] | [3, 4] [3, 4] | [4] [4, 4] | [4] [5, 4] | [4] [0, 5] | [0] [1, 5] | [3] [2, 5] | [3] [3, 5] | [3, 4] [4, 5] | [4] [5, 5] | [4]
表中编号只标记本例对象,不表示排名或另一组数据中的身份。先确认输入单位与边界约定,再逐步核对中间值。零、空结果和不存在是不同状态,不能因为显示相近就互相替代;分数用精确形式保留,便于重新演算。
复核方法
欧氏距离平方保持距离的大小顺序,避免为比较大小先开平方。障碍格本身距离为零。格子距离是允许横竖移动时的无障碍最短步数,这里没有让路径绕过其他障碍,因此不能当成实际可通行路径长度。
先选几个靠角落或位于两障碍中间的位置手算,尤其注意并列最小值。表格第一张列平方距离,第二张列格子距离,单位不能混用。新增或删除障碍会改变多个格子的最近对象,局部修改后不能假设其余距离自动仍然正确。
能说明什么
点到点距离没有包含障碍格的面积,也没有包含角色半径。若需要判断一个圆形角色是否碰到方形障碍,应使用相应几何距离,不能仅凭中心点距离场得出最终碰撞结论。
这份记录用于理解明确规则下的游戏机制。改变输入后,结果也应随之重新计算;若操作规则不同,应先把新规则写清再比较。可以从一两个步骤手算开始,找出第一处差异,而不是只对照最后一个数值。全部中间记录都属于当前案例,不能直接当成其他场景的固定答案。
