计算玩家 AIM (xyz, pitch, yaw) 和 TARGET Vector(xyz) 之间的距离
Calculate the distance between the players AIM (xyz, pitch, yaw) and the TARGET Vector(xyz)
我们有一个目标,它位于关卡中的某个位置,还有一个可以四处移动并可以瞄准任何地方的玩家。
现在我们要计算玩家 AIM 和 TARGET 之间的距离。
玩家的目标离目标有多远? - 如果这个值接近“0”,我们就知道玩家正在瞄准目标。
我们想知道这一点,因为我们想计算玩家开枪时离他有多远。
以下是我们的信息:
- 目标向量(X, Y, Z) position/coords.
- 玩家向量(X, Y, Z) position/coords.
- 玩家俯仰和偏航。
所以你把距离定义为space中的目标点和瞄准线之间的距离。请注意,您还可以将距离定义为连接玩家和目标的线与瞄准线之间的角度。
幸运的是这很简单:
点 b 是 Target
到线 aim
:
的前投影
t = Target - Player
i = max(a*t/a*a, 0) (so we won't report false distances when the target is behind)
B = Player + a * i
distance = dist(B, Target) = len(B - Target)
您可以使用如下公式从俯仰和偏航计算矢量 a
:
a_x = cos(pitch) * cos(yaw)
a_y = sin(pitch)
a_z = cos(pitch) * sin(yaw)
我们有一个目标,它位于关卡中的某个位置,还有一个可以四处移动并可以瞄准任何地方的玩家。 现在我们要计算玩家 AIM 和 TARGET 之间的距离。
玩家的目标离目标有多远? - 如果这个值接近“0”,我们就知道玩家正在瞄准目标。 我们想知道这一点,因为我们想计算玩家开枪时离他有多远。
以下是我们的信息:
- 目标向量(X, Y, Z) position/coords.
- 玩家向量(X, Y, Z) position/coords.
- 玩家俯仰和偏航。
所以你把距离定义为space中的目标点和瞄准线之间的距离。请注意,您还可以将距离定义为连接玩家和目标的线与瞄准线之间的角度。
幸运的是这很简单:
点 b 是 Target
到线 aim
:
t = Target - Player
i = max(a*t/a*a, 0) (so we won't report false distances when the target is behind)
B = Player + a * i
distance = dist(B, Target) = len(B - Target)
您可以使用如下公式从俯仰和偏航计算矢量 a
:
a_x = cos(pitch) * cos(yaw)
a_y = sin(pitch)
a_z = cos(pitch) * sin(yaw)