我需要通过弧实现二维碰撞检测。我有玩家(黑点)和敌人(红点)。玩家可以向任何方向攻击,他的命中范围是120度(绿线表示)和一定的半径(黑色曲线)。
如何实现这种检测?
我已经完成了计算玩家和敌人之间角度的代码,但我不明白如何使用玩家的方向向量来检查它是否在弧内。
计算与敌人的角度和距离。使用它来检查它们是否在范围内。
问题很简单,如果是正方形的区域,因为您使用的是笛卡尔坐标,因此通过转换为径向坐标,这个问题也变得简单。
有了新信息
检查向量 B 的长度是不是太长。
然后向量之间的角度由下式给出: acos(|AB| / |A||B|)
如果角度小于 60 度(120 度的一半),则敌人在射程内。
首先玩家必须有一个方向,例如一个二维向量。简单地说,它与第一条绿线的角度=它与另一条绿线的角度。
您应该执行两项检查:
这应该足够一个想法,希望这会有所帮助。
假设您有指向“向前”的单位长度向量。假设您有指向潜在目标的单位长度向量。如果目标在方舟内,则;
dot(forwardVector, targetVector) >= cosf(arcAngle/2)
.
如果向量不是单位长度,那么它当然不起作用。检查目标是否在要求的角度内。
检查它是否在要求的距离内是微不足道的,并且几乎是squaredLength(targetPosition - playerPosition) <= arkDistance*arkDistance
squaredLength 所在的位置dot(vector, vector)
。