我正在使用Simulation,其中一个objectA跟随objectB而objectB正在逃跑。
我已经实现了将我的观点移近另一个点的方法,但我仍然坚持如何实现“逃避”行动。
假设我有一个100x100的屏幕。
这是我的方法,它代表了跟随方法。
public MutableDouble2D MovePointTowards(Double2D pointA, Double2D pointB, double distance)
{
MutableDouble2D vector = new MutableDouble2D();
vector.x = pointB.x - pointA.x;
vector.y = pointB.y - pointA.y;
double length = Math.sqrt(vector.x * vector.x + vector.y * vector.y);
MutableDouble2D unitVector = new MutableDouble2D();
unitVector.x = vector.x / length;
unitVector.y = vector.y / length;
MutableDouble2D newPoint = new MutableDouble2D();
newPoint.x = pointA.x + unitVector.x * distance;
newPoint.y = pointA.y + unitVector.y * distance;
return newPoint;
}
你们能帮助我发展“逃跑”行动吗? 谢谢!
答案 0 :(得分:0)
这几乎就是你已经拥有的东西,而不是取代A点来获得newPoint,只是用相同的向量取代B点。
答案 1 :(得分:0)
我打算叫他们狮子和山羊。我假设你运行的循环如下:
while( true )
{
lionPos = moveTowards( goatPos, lionPos, d );
goatPos = someFunction();
}
如果d是常数,那么狮子以恒定的速度追逐山羊。如果你想让山羊以恒定速度逃跑,那么someFunction只不过是
moveTowards( goatPos, lionPos, d );
同样,改变d将改变速度。如果你放置与距离相关的速度,你应该能够看到有趣的模拟。尝试为Lion设置恒定的vel,但是(1 / R ^ 2)vel为山羊。然后狮子会在远处时赶上,但只要它足够接近,山羊就会跑得更快。
如果你想让山羊智能地远离狮子(不一定是直接相反的方向),那么就会有一些有趣的文献。一个巧妙的讨论是here。