低帧速下判断移动物体到达目标位置

昨天review一同事上传的代码,发现了其中的一个问题。其实蛮常见的,就是判断一个活动的物体是否移动到了目标位置点。其作法就是判断两点之间的距离,然后如果距离小于某个阈值的话就认为到达了目标点。这样判断的几何原理就是移动物体是否到达了目标点所在的一个圆形范围内。

这种方法通常情况下也没有什么问题,但是在mobile上,或者某些运行帧速比较低的情况下就会出现误判,也即通常物理引擎中所出现的“穿越”情形,因deltaTime比较大,直接导致移到物体在两帧之间的位置越过了该限定圆。

更好的方法是利用点与平面之间的有向距离来进行计算。这里的点就是目标点,基准平面就是以活动物体移动的方向为法向量、活动物体当前所在的位置为平面上的点所构成的平面。该平面与目标点之间会有三种有向位置关系:

  • 点在平面前:移动物体还未到达目标点;
  • 点在平面上:移动物体刚好到达目标点;
  • 点在平面后:移动物体已经越过目标点;
其中的后两种情况出现时都处理为达到目标点即可。另外,点到平面的有向距离这里也可以简化计算,只需要计算移动物体的前进方向与其到目标点之间的方向的点乘正负即可。
细微之中的差异即可决定不同的结果。

你可能感兴趣的:(低帧速下判断移动物体到达目标位置)