Нужно уравнение, чтобы найти требуемую скорость

Мне очень нужна помощь в вычислении уравнения скорости, чтобы запустить игрока из одного места X Y Z в другое. просмотрев другие потоки, я создал следующий код (код не работает)

public void vJump(Entity entity, Location loc, double time)
{
    this.entity = entity;
    entity.setVelocity(getV(entity.getLocation(), loc, time));
}

private Vector getV(Location p1, Location p2, double t)
{
    double x = p2.getX() - p1.getX();
    double y = p2.getY() - p1.getY();
    double z = p2.getZ() - p1.getZ();
    double gravity = -14.266;
    return new Vector(getVelocity(x,gravity,t), getVelocity(y,gravity,t), getVelocity(z,gravity,t));
}

private double getVelocity(double d, double a, double t)
{
    a*=-.5;
    a*=Math.pow(t,2);
    d-=a;
    return d/t;
}

я не знаю ни гравитации в майнкрафте, ни трения движения. проблема с приведенным выше кодом заключается в том, что он идет не в правильном направлении и не создает эффект параболы, который я искал.


person fox_news    schedule 13.12.2013    source источник
comment
Чтобы быстрее получить помощь, опубликуйте SSCCE.   -  person Andrew Thompson    schedule 13.12.2013
comment
Хорошо, каждый раз, когда это вызывается, передается текущая позиция, а не начальная позиция, что немного усложнит ситуацию.   -  person Richard Tingle    schedule 13.12.2013
comment
И можете ли вы отслеживать другие поля. Нравится исходное положение и сколько времени прошло с момента начала прыжка   -  person Richard Tingle    schedule 13.12.2013
comment
И приходится ли бороться с гравитацией. И что вы хотите, чтобы произошло, если прыжок не удался (например, столкнулся с чем-то)   -  person Richard Tingle    schedule 13.12.2013
comment
Действительно ли гравитация влияет на все три измерения?   -  person dcsohl    schedule 13.12.2013


Ответы (2)


основываясь на ответе Ника Роудса, я удалил гравитацию для всех, кроме y (в майнкрафте вверх и вниз - это y). а затем я удвоил скорость всех самолетов на 2, и в итоге это сработало! вот код. также я узнал, что гравитация на самом деле была 0,1.

public void vJump(Entity entity, Location loc, double time)
{
    this.entity = entity;
    entity.setVelocity(getV(entity.getLocation(), loc, time));
}

private Vector getV(Location p1, Location p2, double t)
{
    double x = p2.getX() - p1.getX();
    double y = p2.getY() - p1.getY();
    double z = p2.getZ() - p1.getZ();
    double gravity = 0.1;
    return new Vector(getVelocity(x,0,t), getVelocity(y,gravity,t), getVelocity(z,0,t));
}

private double getVelocity(double d, double a, double t)
{
    a*=-.5;
    a*=Math.pow(t,2);
    d-=a;
    return 2*(d/t);
}
person fox_news    schedule 16.12.2013

Часть проблемы заключается в том, что гравитация будет действовать только для вектора z. Не будет гравитационной силы в направлениях x или y. Это может объяснить, почему ваш код производит движение в другом направлении, чем ожидалось.

try (при условии, что t определяется как общее время прохождения):

return new Vector(getVelocity(x,0,t), getVelocity(y,0,t), getVelocity(z,gravity,t));
person Destruktor    schedule 13.12.2013