我需要通过圆弧实现二维碰撞检测。我有玩家(黑点)和敌人(红点)。玩家可以在任何方向进行攻击,他的命中区域为120度(绿色线条显示)和某个半径(黑色曲线)。圆弧中的二维碰撞检测
如何实现这个检测?
我已经完成了玩家和敌人之间的角度计算的代码,但我不明白如何使用玩家的方向矢量来检查它是否在弧内。
我需要通过圆弧实现二维碰撞检测。我有玩家(黑点)和敌人(红点)。玩家可以在任何方向进行攻击,他的命中区域为120度(绿色线条显示)和某个半径(黑色曲线)。圆弧中的二维碰撞检测
如何实现这个检测?
我已经完成了玩家和敌人之间的角度计算的代码,但我不明白如何使用玩家的方向矢量来检查它是否在弧内。
计算对敌人的角度以及距离它们的距离。用它来检查它们是否在范围内。
问题很简单,如果由于您使用笛卡尔坐标,因此通过转换为径向坐标,这个问题变得简单,如果一个正方形的区域。
随着新的信息
检查向量B的长度不是太长。 (| A·B |/| A || C |)
如果该角度小于60度(半的120),那么敌人是在范围ACOS:
然后,向量之间的角度由下式给出。
感谢你的方法是非常清晰,那么我的。有用。 – 2012-04-29 14:29:06
首先玩家必须有一个方向,例如2D矢量。简而言之,它与第一条绿线成角度=与另一条绿线成角度。
您应该执行两项检查:
这应该是足够的想法,希望有帮助。
假设你有单位长度的向量指向“向前”。假设你有单位长度矢量指向潜在目标。如果目标在方舟内,那么;
dot(forwardVector, targetVector) >= cosf(arcAngle/2)
。
如果向量不是单位长度,当然它不起作用。这检查目标是否在要求的角度内。
检查它是否在要求的距离内是微不足道的,几乎是squaredLength(targetPosition - playerPosition) <= arkDistance*arkDistance
其中squaredLength是dot(vector, vector)
。
曲线和绿线长度之间是否有任何关系? – 2012-04-29 14:08:09
绿线只显示角度。曲线是实际的半径 – 2012-04-29 14:08:39
是的,但玩家可以旋转这个弧线 – 2012-04-29 14:10:02