Java 将点从另一点移开

Java 将点从另一点移开,java,math,vector,Java,Math,Vector,我正在进行模拟,其中一个objectA跟随objectB,objectB正在逃跑 我已经实现了将我的点移到另一点的方法,但我被如何实现“逃跑”操作所困扰 假设我有一个100x100的屏幕 这里是我的方法,它代表follow方法 public MutableDouble2D MovePointTowards(Double2D pointA, Double2D pointB, double distance) { MutableDouble2D vector = new MutableDo

我正在进行模拟,其中一个objectA跟随objectB,objectB正在逃跑

我已经实现了将我的点移到另一点的方法,但我被如何实现“逃跑”操作所困扰

假设我有一个100x100的屏幕

这里是我的方法,它代表follow方法

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;
}
你们能帮我制定“逃跑”行动吗?
谢谢

这将几乎是你已经拥有的,而不是置换点A得到新的点,只是用相同的向量置换点B。

我将称它们为狮子和山羊。我假设您正在运行一些循环,如下所示:

while( true )
{
  lionPos = moveTowards( goatPos, lionPos, d );
  goatPos = someFunction();
}
如果d是常数,那么狮子以恒定的速度追赶山羊。如果你想让山羊以恒定的速度逃跑,那么函数就是

moveTowards( goatPos, lionPos, d );
同样,改变d会改变速度。如果你把距离相关的速度,你应该能够看到有趣的模拟。试着为狮子设定恒定的水平,但为山羊设定(1/R^2)水平。然后狮子会在距离远的时候追上来,但只要它足够近,山羊就会跑得更快


如果你想让山羊聪明地逃离狮子(不一定直接朝相反的方向),有一些有趣的文献。一个简洁的讨论是

什么是距离变量?你想模仿什么样的“力”?类似的电荷类型的力(静电斥力)随着距离的平方反比减小,还是弹簧类型的力与距离成正比?你们试过什么?距离是物体每一步移动的像素数。@装满鳗鱼的气垫船,我想实现的就是远离物体类型A,可能有很多物体在显示中移动,所以基本的想法就是远离它们。嗯。。。我不明白你的意思,MoveToward函数是减小距离,但我需要将山羊从狮子身上移开。山羊从狮子身上跑开的方向与狮子向山羊身上跑开的方向相同。