当一个向量的方向未知时,两个向量之间的交点

Apo*_*one 0 math artificial-intelligence vectormath unity-game-engine game-physics

问题:我有两个向量。我知道一个向量的起点,它的方向,它的大小。我知道另一个向量的起点及其大小。我需要找到第二个向量的方向以及相交的位置。

   Vector A:                        Vector B:

Position = Known                   Position = Known  
Direction= Known                   Direction= UNKNOWN
Magnitude= Known                   Magnitude= Known

To Find: Point of intersection.
Run Code Online (Sandbox Code Playgroud)

是否可以使用给定的参数找到交点?如果是,那么如何?

应用:我想根据他移动的速度找到一个玩家会被发现的位置,并在他被发现的那一刻向他发射子弹,同时考虑到子弹到达该虚拟目标所花费的时间位置。

meo*_*dog 5

继评论之后,我将在这里进行一次飞跃并直接回答您的最终问题。

假设玩家在初始时间处于一个点p并以速度移动v;你的枪就位q并以速度向任何方向发射子弹s

在此处输入图片说明

OP 的长度是v?tQ的长度s?t。角度a由点积给出:

在此处输入图片说明

然后我们可以使用余弦规则来求解?t

在此处输入图片说明

写在这个形式中,我们可以很容易地看到,这是一个二次方程,因此直接解决了?t使用二次式

在此处输入图片说明

这里有几种情况我们需要考虑:

  • v < s: 只需要取正根,否则我们会得到负时间。
  • v > sdot(PQ, s) < 0:子弹永远不会抓住玩家。
  • v > sdot(PQ, s) > 0:这次取负根,因为正根用于向后移动的玩家(更长的时间;这也是上图中所示的情况)。

?t从上面获得正确的值将使我们能够找到交点o,从而找到预期的方向d

在此处输入图片说明

请注意,这d不是标准化的。此外,与角度方法不同,此解决方案也适用于 3D