将点移离另一个点

时间:2012-03-08 20:50:36

标签: java math vector

我正在使用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;
}

你们能帮助我发展“逃跑”行动吗? 谢谢!

2 个答案:

答案 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