问题:我有两个向量。我知道其中一个向量的起点、方向和大小。我知道另一个向量的起点和大小。我需要找到第二个向量的方向以及交点的位置。
向量 A: 向量 B:位置 = 已知 位置 = 已知 方向 = 已知 方向 = 未知大小 = 已知 大小 = 已知要找:交点。
根据给定的参数,是否有可能找到交点?如果可以,那么如何找到?
应用:我想根据玩家移动的速度找到玩家的位置,并在找到他的那一刻向他射击子弹,同时考虑子弹到达该虚拟目标位置所需的时间。
回答:
根据评论,我将直接回答你的最终问题。
假设玩家在初始时间位于点 p
并以速度 v
移动;你的枪位于位置 q
并以速度 s
向任何方向射击子弹:
OP 的长度为 vΔt
,Q 的长度为 sΔt
。角度 a
由点积给出:
然后我们可以使用余弦定理来求解 Δt
:
以这种形式写出,我们可以很容易地看出这是一个二次方程,因此可以直接使用二次方程公式来求解 Δt
:
我们需要考虑几种情况:
v < s
:只需取正根,否则会得到负时间。v > s
且dot(PQ, s) < 0
:子弹永远不会追上玩家。v > s
且dot(PQ, s) > 0
:这次取负根,因为正根是针对向后移动的玩家(时间更长;这也是上图中展示的情况)。
从上面的正确 Δt
值可以帮助我们找到交点 o
,因此可以找到预定的方向 d
:
请注意,d
未经归一化。此外,这个解决方案也适用于3D,与使用角度的方法不同。