所以我在指导行为,我设法做了一些简单的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.)
答案 0 :(得分:0)
Pursuit中的挑战,与Arrive相反,是你不知道目的地,甚至可能随目标改变速度而改变。
中间形式是拦截SB,您可以假设目标具有固定的速度和航向。这意味着你知道所有未来的位置,你可以选择一个点并绘制一个方向。确切的SB将取决于初始位置,最大加速度,最大速度,转弯速率以及可能需要匹配速度。
使用Pursuit,您甚至需要考虑目标速度的可能变化,这意味着您需要考虑目标最大加速度,速度和转弯率。
这就是你需要所有这些载体的原因。
对于包括您在内的所有案例,没有单一的解决方案。你可能需要修改线性代数。