0

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

   Vector A:                        Vector B:

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

To Find: Point of intersection.

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

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

4

2 回答 2

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,这与使用角度的方法不同。

于 2018-02-08T17:33:42.657 回答
1

让下标 1 标记玩家,下标 2 标记 AI:

  • 初始:位置(x_i,y_i)
  • 角度:alpha_i
  • 速度:u_i

作为时间 t 的函数的位置是:

  • 玩家:(x_1 + u_1 * t * cos(alpha_1), y_1 + u_1 * t * sin(alpha_1))
  • AI 的子弹:(x_2 + u_2 * t * cos(alpha_2), y_2 + u_2 * t * sin(alpha_2))

你有 2 个未知数:

  • t - 碰撞时间
  • alpha_2 - AI 应该拍摄的角度

当 Xs 和 Ys 匹配时发生碰撞。IE:

  • x_1 + u_1 * t * cos(alpha_1) = x_2 + u_2 * t * cos(alpha_2)
  • y_1 + u_1 * t * sin(alpha_1) = y_2 + u_2 * t * sin(alpha_2)

所以,

  • alpha_2 = arcos( (x_1 + u_1 * t * cos(alpha_1) - x_2) / u_2 * t )

并且

  • alpha_2 = arcsin( (y_1 + u_1 * t * sin(alpha_1) - y_2) / u_1 * t )

代入您的值并将它们等同于 alpha_2 的表达式以获得 t,然后您可以在任一表达式中代入 t 以获得角度 alpha_2。

于 2018-02-08T17:14:21.313 回答