转向行为,追求,我如何预测线性向量(MATH)?

时间:2015-01-22 03:01:10

标签: c++ artificial-intelligence

所以我在指导行为,我设法做了一些简单的Seek,Flee和Arrive S.B.然而,我正在与Pursuit S.B。

进行一些讨论

我已经读过,为了计算我的TargetAgent未来的一个点 我应该这样计算。

SVector nVector = v.pos + (vMagnitude * Velocity * time); //This get a point in advance from the agent

我从追求中得到了一个非常好的RAW代码:

SVector CBoid::Pursuit(const SVector& vTarget)
{
//get the vector from this Agent to Target Agent.
SVector nVector = position - vTarget; 

//Acquire the lenght of vector between this and Target.
double vMagnitude = nVector.Magnitude();

//locate the new point and set my current vector to that point.
nVector = vTarget.position + (vTarget.Magnitude() * vTarget.Velocity * vTarget.time);

//if this  Magnitude is less than  target radius, start slowing down. //this part is just an idea.
if (vMagnitude > AGENTS_RADIUS && vMagnitude < 0.01)
{
    double slowDownScalar = vMagnitude / AGENTS_RADIUS;
    nVector * slowDownScalar;
    return Seek(nVector);
}

else
    return Seek(nVector);

}

*这是一个原始函数。

我不明白的是为什么我需要这些变量。我已经阅读了很多关于向量但没有关于这种预测方法的文章。 任何人都可以向我解释为什么或如何预测我的载体的未来位置? (我主要想了解,所以我可以制作自己的S.B.)

1 个答案:

答案 0 :(得分:0)

Pursuit中的挑战,与Arrive相反,是你不知道目的地,甚至可能随目标改变速度而改变。

中间形式是拦截SB,您可以假设目标具有固定的速度和航向。这意味着你知道所有未来的位置,你可以选择一个点并绘制一个方向。确切的SB将取决于初始位置,最大加速度,最大速度,转弯速率以及可能需要匹配速度。

使用Pursuit,您甚至需要考虑目标速度的可能变化,这意味着您需要考虑目标最大加速度,速度和转弯率。

这就是你需要所有这些载体的原因。

对于包括您在内的所有案例,没有单一的解决方案。你可能需要修改线性代数。