问题:我有两个向量。我知道一个向量的起点,它的方向,它的大小。我知道另一个向量的起点及其大小。我需要找到第二个向量的方向以及交叉点的位置。
Vector A: Vector B:
Position = Known Position = Known
Direction= Known Direction= UNKNOWN
Magnitude= Known Magnitude= Known
To Find: Point of intersection.
是否有可能找到具有给定参数的交点?如果是,那怎么样?
应用程序:我想根据他移动的速度找到一个玩家被找到的位置,并在他被找到的那一刻向他射击子弹,考虑到他所花费的时间。子弹到达虚拟目标位置。
答案 0 :(得分:4)
继续发表评论之后,我将在这里进行一次飞跃并直接回答您的终极问题。
假设玩家在初始时间点p
并以速度v
行进;你的枪位于q
位置并以任何方向以s
的速度射击子弹:
OP的长度为vΔt
,Q sΔt
的长度为a
。角度Δt
由点积:
然后我们可以使用余弦规则来解决Δt
:
以这种形式写的,我们可以很容易地看到它是一个二次方程,因此使用Quadratic formula直接求解v < s
:
我们需要在这里考虑一些案例:
v > s
:只需要采取正根,否则我们会得到负面时间。dot(PQ, s) < 0
和v > s
:子弹永远不会抓住玩家。dot(PQ, s) > 0
和Δt
:这次采取负根,因为正根用于向后旅行的玩家(更长的时间;这也是上图中显示的情况)。从上方获得o
的正确值将使我们能够找到交叉点d
,从而找到预期的方向d
:
请注意,var results = JObject.Parse(json)
["data"]["cart"]["seats"]
.Children<JProperty>().First().Value
.Children<JProperty>().First().Value
.Children<JProperty>().First().Value
.ToObject<int[]>();
未正常化。此外,此解决方案也适用于3D ,与角度方法不同。
答案 1 :(得分:1)
让下标1标记玩家,下标2标记AI:
作为时间t的函数的位置是:
你有2个未知数:
当X和Y匹配时发生碰撞。即:
所以,
以及
替换你的值并将它们等同于alpha_2的表达式以获得t,然后你可以在任一表达式中替换t来获得角度alpha_2。