向方向移动时减速

时间:2017-09-01 04:39:39

标签: java math 2d interpolation physics

这里简要介绍了您会看到的一些方法:

  • this.bounds:返回船舶的边界(一个矩形)
  • this.bounds.getCenter():返回代表船舶边界中心的Vector2d
  • getVelocity()Vector2d代表船舶的速度(添加到每一帧的位置)
  • new Vector2d(angle):一个新的Vector2d,当给定一个角度(弧度)时进行标准化
  • Vector2d#interpolate(Vector2d target, double amount):非线性插值!如果您想查看interpolate代码,请在此处(在课程Vector2d中):

    public Vector2d interpolate(Vector2d target, double amount) {
       if (getDistanceSquared(target) < amount * amount)
           return target;
       return interpolate(getAngle(target), amount);
    }
    public Vector2d interpolate(double direction, double amount) {
       return this.add(new Vector2d(direction).multiply(amount));
    }
    

当玩家没有按键时,船只应该减速。以下是我为此所做的事情:

public void drift() {
    setVelocity(getVelocity().interpolate(Vector2d.ZERO, this.deceleration));
}

然而,现在我已经意识到我希望它在朝向目标时漂移。我试过这个:

public void drift(Vector2d target) {
    double angle = this.bounds.getCenter().getAngle(target);
    setVelocity(getVelocity().interpolate(new Vector2d(angle), this.deceleration));
}

这当然不会实际达到零速度(因为我向角度矢量插值,其幅度为1)。而且,它只是真的&#34;漂移&#34;当它变得非常慢时,在目标的方向上。

关于如何实现这一目标的任何想法?我无法弄明白。这是一个很大的问题,非常感谢。

这是使用我制作的大型图书馆,如果您对某些内容有什么问题请问,我想我已经覆盖了大部分内容。

1 个答案:

答案 0 :(得分:1)

你的interpolate函数做的很奇怪。为什么不使用简单的物理模型?例如:

正文具有位置(px, py)和速度(vx, vy),单位方向向量(dx, dy)也很方便

在(小)时间间隔后,dt速度根据加速度而变化

vx = vx + ax * dt
vy = vy + ay * dt

任何外力(马达)都会导致加速并改变速度

ax = forcex / mass  //mass might be 1
ay = forcey / mass

干摩擦力大小不依赖于速度,它的方向与速度相反

ax = c * mass * (-dx)
ay = c * mass * (-dy)

液体摩擦力大小取决于速度(不同情况下有许多不同的方程式),它的方向与速度相反

ax = k * Vmagnitude * (-dx)
ay = k * Vmagnitude * (-dy)

因此,对于每个时间间隔添加所有力,找到结果加速度,找到结果速度,相应地改变位置